linux 下的 opengl SDK。
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 编译成功
gbbbbb
第二个例子。
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++
试运行一下。显卡如果识别不了。屏蔽掉 glutInitContextVersion(4,3);这语句就可以了。
另外《OpenGl编程指南》这书源码中有包含库和包含文件头 拷入当前目录 gcc 编译命令加上 -Iinclude -Llib 参数就可以了。
运行正常。
有些系统静态编译不通过。
系统会缺失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使用效果不错。
==============================================
还有问题,那系统重装。
如按上所述做不出来请在文章后留言,文章随时更新。