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

linux 下的 opengl SDK。

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

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使用效果不错。

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

还有问题,那系统重装。

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



分享给朋友:

相关文章

关于 Cannot enable. Maybe the USB cable is bad? 这个问题。

关于 Cannot enable. Maybe the USB cable is bad? 这个问题。

经常摆弄电脑,那USB接口也是插进,拔出多少次。有一天发生了这个问题,什么问题呢?见图:只要是linux 新内核,都会出现这个问题,虚拟机USB功能,DOSBOX等USB功能不可识别。在网上查看了一些...

关于ch341驱动,联动3D打印机USB串口通讯.

关于ch341驱动,联动3D打印机USB串口通讯.

手上有个3D打印机,搬家的原因,好久没用.天气热了,打印温度很适合,正好可以使用.又过了一年.发现linux 版本内核已经升级,和原来的系统不一样了. 按照3D打印机的说明,和寻找它的程序,原来的方法...

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

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

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

我谈易语言

我谈易语言

易语言是一个集成打包的中文编程的语言。说实话,只要在电脑上的程序,易语言都可以用自己的方式实现。易语言可以开发linux 控制台下的图文程序和工具,十分好用。易语言的源码和例子量很大,精华源码例子已经...

谈软件的商业模式。

谈软件的商业模式。

软件开发成一个成品软件,不是共享就是免费,要么专有。商业软件要么有名气,要么有人气。很多共享软件或免费捐赠软件收入并不高,5元就完事了,要使用的人很多才算是有收入。要一个月卖一千元,软件5元1个,要卖...

VC++ 版本升级常见错误一句集。

VC++ 版本升级常见错误一句集。

很多程序源码从低VC版本到高VC版本就发现不能编译,现在说一下常见问题。warning C4838: 从“unsigned int”转换到“INT”需要收缩转换。这是因为 int 整形变量在不同的机器...