当前位置:首页 > 我的程序 > 正文内容

linux 下的 opengl SDK。

Peirre5年前 (2020-06-14)我的程序1162

opengl 图形库是开放式图形库,最近出了一个freeglut3 我们下载它:

sudo apt-get install freeglut3

sudo apt-get install freeglut3-dev

已经安装好了。但是如果是初学者,看《OpenGl编程指南(第8版时)》发现书中的例子编译不了。

我们再安装点文件,加上opengl 的一些扩展。

加上 mesa 库

dpkg -i libglu1-mesa_9.0.0-2_amd64.deb

上面这个包在linux mint或图班图系统中,共享库是隐藏的,请找到它。

(可在debina linux 共享库找到)实际是libglu1-mesa  amd64版

sudo apt-get install mesa-utils

sudo apt-get install mesa-common-dev

sudo apt-get install libglu1-mesa-dev

sudo apt-get install libgles2-mesa

sudo apt-get install libgles2-mesa-dev

sudo apt-get install libglapi-mesa

sudo apt-get install libgl1-mesa-glx

加上 GLEW库

sudo apt-get install libglew2.0

sudo apt-get install libglew-dev

sudo apt-get install glew-utils

例子:

c语言例子:

main.c


#include <GL/glut.h>
#include <stdlib.h>
void init();
void display();

int main(int argc, char* argv[])
{
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
        glutInitWindowPosition(0, 0);
        glutInitWindowSize(300, 300);

        glutCreateWindow("OpenGL 3D View");

        init();
        glutDisplayFunc(display);

        glutMainLoop();
        return 0;
}

void init()
{
        glClearColor(0.0, 0.0, 0.0, 0.0);
        glMatrixMode(GL_PROJECTION);
        glOrtho(-5, 5, -5, 5, 5, 15);
        glMatrixMode(GL_MODELVIEW);
        gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0);
}

void display()
{
        glClear(GL_COLOR_BUFFER_BIT);

        glColor3f(1.0, 0, 0);
        glutWireTeapot(3);

        glFlush();
}

使用 gcc -o test main.c -lglut -lGL -lGLU 编译成功

Screenshot from 2020-06-14 22-09-11.pnggbbbbb

第二个例子。

C++语言:

triangles.cpp

///////////////////////////////////////////////////////////////////////
//
// triangles.cpp
//
///////////////////////////////////////////////////////////////////////
#include <iostream>
using namespace std;

#include "vgl.h"
#include "LoadShaders.h"

enum VAO_IDs { Triangles, NumVAOs };
enum Buffer_IDs { ArrayBuffer, NumBuffers };
enum Attrib_IDs { vPosition = 0 };

GLuint VAOs[NumVAOs];
GLuint Buffers[NumBuffers];

const GLuint NumVertices = 6;

//---------------------------------------------------------------------
//
// init
//

void
init(void)
{
glGenVertexArrays(NumVAOs, VAOs);
glBindVertexArray(VAOs[Triangles]);

GLfloat vertices[NumVertices][2] = {
    { -0.90, -0.90 }, // Triangle 1
    { 0.85, -0.90 },
    { -0.90, 0.85 },
    { 0.90, -0.85 }, // Triangle 2
    { 0.90, 0.90 },
    { -0.85, 0.90 }
};

glGenBuffers(NumBuffers, Buffers);
glBindBuffer(GL_ARRAY_BUFFER, Buffers[ArrayBuffer]);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices),vertices, GL_STATIC_DRAW);

ShaderInfo shaders[] = {
    { GL_VERTEX_SHADER, "triangles.vert" },
    { GL_FRAGMENT_SHADER, "triangles.frag" },
    { GL_NONE, NULL }
};

GLuint program = LoadShaders(shaders);
glUseProgram(program);
glVertexAttribPointer(vPosition, 2, GL_FLOAT,
GL_FALSE, 0, BUFFER_OFFSET(0));
glEnableVertexAttribArray(vPosition);
}
//---------------------------------------------------------------------
//
// display
//
void
display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBindVertexArray(VAOs[Triangles]);
    glDrawArrays(GL_TRIANGLES, 0, NumVertices);
    glFlush();
}

//---------------------------------------------------------------------
//
// main
//

int
main(int argc, char ** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA);
    glutInitWindowSize(512, 512);
//    glutInitContextVersion(4, 3);
    glutInitContextProfile(GLUT_CORE_PROFILE);
    glutCreateWindow(argv[0]);
    if (glewInit()) {
        cerr << "Unable to initialize GLEW ...exiting" << endl;
        exit(EXIT_FAILURE);
    }

init();
glutDisplayFunc(display);
glutMainLoop();
}

编译 gcc -o test triangles.cpp LoadSharders.cpp -lGL -lGLU -lglut -lGLEW -lstdc++

Screenshot from 2020-06-14 22-14-23.png

试运行一下。显卡如果识别不了。屏蔽掉 glutInitContextVersion(4,3);这语句就可以了。

另外《OpenGl编程指南》这书源码中有包含库和包含文件头 拷入当前目录 gcc 编译命令加上 -Iinclude -Llib 参数就可以了。

Screenshot from 2020-06-14 22-18-33.png

运行正常。

有些系统静态编译不通过。

系统会缺失libGL.a这个静态库,用动态库连接就可以了。

这个库应该在/usr/lib/x86_64-linux-gnu下。

如果找不到 #include <GL/glut.h> 文件把 <> 改成 ""

注意命令行的编译开关位置。

================================================

实际上现在出了一个SDL图形库。

sudo apt-get install freeglut3

sudo apt-get install freeglut3-dev

组合

sudo apt-get install libsdl2-doc libsdl2-dev libsdl2-2.0-0

sudo apt-get install libsdl-image1.2 libsdl-net1.2  libsdl-sound1.2 libsdl1.2debian

扩展

sudo apt-get install libsdl2-gfx-doc libsdl2-gfx-dev

这种搭配,配合opengl使用效果不错。

==============================================

还有问题,那系统重装。

如按上所述做不出来请在文章后留言,文章随时更新。



分享给朋友:

相关文章

快速傅里叶易语言算法。

雷达滤波需要快速傅里叶公式计算波形。    工程中待处理的信号,通常具有非周期性,故我们需要对离散傅里叶变换进行研究。离散公式:【x(n)是采样的时域信号,X(k)是对于...

随手写的时间设置程序,主要是防止系统时间无故修改。

随手写的时间设置程序,主要是防止系统时间无故修改。

程序说明:测试版程序功能。同步系统时间数据可选月历,手工输入可自动识别时间修改,修改后一分钟报警。测试版没有恢复时间功能。以后会增加。欢迎下载的朋友帮助我找程序问题,没有花多少功夫,请多多原谅。这个程...

linux mint 20 下编译最新内核所添加的文件。

linux mint 20 下编译最新内核所添加的文件。

linux mint 20 下编译最新内核文件所需要的两个文件包。sudo apt-get install libncurses5-devsudo apt-get install libssl-dev...

USB设备的插入机制与USB驱动故障。

USB设备的插入机制与USB驱动故障。

USB主机检测设备,首先在USB集线器的每个端口的D+,D-上,分别接了一个15K欧姆的下拉电阻到地。集线器端口为空时,被这两个电阻拉低了电平。在USB设备端,D+或者D- 上接了上拉1.5K电阻。全...

关于编译器不愿意说的那些事。

关于编译器不愿意说的那些事。

计算机发展了好多年。当中也不泛有很多对程序的爱好。很多人不是专业水平,也不是在算法类中特别出众,就是喜欢而已。好像认为自己就只那个水平,或者为一些调试不通过发愁。可以说,实际上都不是你的错,是编译器的...

谈谈引导程序的想法。

谈谈引导程序的想法。

当个人电脑一出现就有了磁盘系统,不管是软盘,光盘,硬盘,计算机要应用操作系统就要引导,引导程序一段代码。这引导代码很小,在第一个磁盘的扇区上,平时没什么人注意它。这段代码损坏一个字节,都会造成计算机瘫...