linux 下的 opengl SDK。

Peirre4年前我的程序1074

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

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

还有问题,那系统重装。

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



相关文章

黑洞数的演示程序。

黑洞数的演示程序。易语言改编,小演示。没多大意思。只是测试一下易语言的扩展功能,有同好者欢迎交流。这个网站没做SEO。也许等你们太久,但是属于个人网页,展示一下。在网上留个脚印。下载地址:黑洞数的演示...

关于DOSBOX的简单说明。

关于DOSBOX的简单说明。

linux 下的共享软件DOSBOX 在有些版本的linux 中不能使用鼠标。网上说明要换声卡地址和中断,连接鼠标端口才可以使用。 曾经设置过,可以使用参数不记得。有个解决方法。这是软件问题。 先卸载...

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

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

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

谈谈引导程序的想法。

谈谈引导程序的想法。

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

我谈易语言

我谈易语言

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

雷达新品硬件介绍。

雷达新品硬件介绍。

5.8G雷达模块:这是一个简单的探索物体移动的一个模块,可用于感应移动的物体。电磁波感应和光波补偿感应灵敏度中等,有误判的可能。识别很简单,只判别一个感应高电信号。有挡体就反应电信号。初步识别功能。一...