最近在网上发现OpenGL超级宝典已经出了第五版,之前看过第三版,于是将第五版和完整源码下载下来学习,但惊奇地发现,第五版demo程序已经能够支持Linux下运行,原来要在Linux安装开源OpenGL包Mesa及Freeglut才可以,于是进行了一下尝试,Mesa安装成功并且OpneGL的Demo程序已经顺利编译运行,将该过程记录下来。
/**********************************************************************************************************************************/
原创作品,转载时请务必以超链接形式标明文章原始出处:http://blog.csdn.net/gqb666/article/details/8994789,作者:gqb666一、安装Mesa及Freeglut开源包:
使用如下命令即可完成Mesa包及freeglut包的安装:
sudo apt-get install mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev mesademos
注意:可能mesademos包无法下载下来,另外一种安装的方法是从官网把上面的源码包下载下来自行编译安装,效果一样的。
二、Linux下使用OpenGL超级宝典第五版Demo程序:
可以从地址:http://download.csdn.net/detail/gqb666/5670371 下载OpenGL超级宝典英文第五版及完整源代码,然后将源代码解压后会看到Linux和Src两个与本文相关的目录。本文以Chapter05中的Pyramid为例来说明使用方法。
进入目录:Linux/Chapter05/Pyramid,里面有Makefile及用作纹理tga格式的图片。Makefile的内容如下:
MAIN = Pyramid SRCPATH = ../../../Src/Chapter05/$(MAIN)/ SHAREDPATH = ../../../Src/GLTools/src/ SHAREDINCPATH = ../../../Src/GLTools/include/ LIBDIRS = -L/usr/X11R6/lib -L/usr/X11R6/lib64 -L/usr/local/lib INCDIRS = -I/usr/include -I/usr/local/include -I/usr/include/GL -I$(SHAREDINCPATH) -I$(SHAREDINCPATH)GL CC = g++ CFLAGS = $(COMPILERFLAGS) -g $(INCDIRS) LIBS = -lX11 -lglut -lGL -lGLU -lm prog : $(MAIN) $(MAIN).o : $(SRCPATH)$(MAIN).cpp glew.o : $(SHAREDPATH)glew.c GLTools.o : $(SHAREDPATH)GLTools.cpp GLBatch.o : $(SHAREDPATH)GLBatch.cpp GLTriangleBatch.o : $(SHAREDPATH)GLTriangleBatch.cpp GLShaderManager.o : $(SHAREDPATH)GLShaderManager.cpp math3d.o : $(SHAREDPATH)math3d.cpp $(MAIN) : $(MAIN).o glew.o $(CC) $(CFLAGS) -o $(MAIN) $(LIBDIRS) $(SRCPATH)$(MAIN).cpp $(SHAREDPATH)glew.c $(SHAREDPATH)GLTools.cpp $(SHAREDPATH)GLBatch.cpp $(SHAREDPATH)GLTriangleBatch.cpp $(SHAREDPATH)GLShaderManager.cpp $(SHAREDPATH)math3d.cpp $(LIBS) clean: rm -f *.o该Makefile使用到了Src目录下的文件。依次执行命令
$make clean
$make
会生成新的可执行文件Pyramid,我们执行Pyramid后就可以看到使用纹理贴图效果的金字塔了,如下图:
三、另附一段Linux下可编译运行的OpenGL代码:
/* sphere.c 此程序利用GLUT绘制一个OpenGL窗口,并显示一个加以光照的球。 */ /* 由于头文件glut.h中已经包含了头文件gl.h和glu.h,所以只需要include 此文件*/ # include<GL/glut.h> # include<stdlib.h> /* 初始化材料属性、光源属性、光照模型,打开深度缓冲区 */ void init(void) { GLfloat mat_specular[] = {1.0, 1.0, 1.0, 1.0}; GLfloat mat_shininess[] = {50.0}; GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0}; glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_SMOOTH); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); } /*调用GLUT函数,绘制一个球*/ void display ( void ) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glutSolidSphere(1.0, 40, 50); glFlush(); } /* 定义GLUT的reshape函数,w、h分别是当前窗口的宽和高*/ void reshape(int w, int h) { glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w <= h) glOrtho(-1.5, 1.5, -1.5 * ( GLfloat )h/( GLfloat )w, 1.5 * ( GLfloat )h / ( GLfloat )w, -10.0, 10.0); else glOrtho(-1.5 * ( GLfloat )w / ( GLfloat )h, 1.5 * ( GLfloat )w / ( GLfloat ) h, -1.5, 1.5, -10.0, 10.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } /* 定义对键盘的响应函数 */ void keyboard(unsigned char key, int x, int y) { /*按Esc键退出*/ switch(key) { case 27: exit(0); break; } } int main(int argc, char** argv) { /* GLUT环境初始化*/ glutInit(&argc, argv); /* 显示模式初始化 */ glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); /* 定义窗口大小 */ glutInitWindowSize(300, 300); /* 定义窗口位置 */ glutInitWindowPosition(100, 100); /* 显示窗口,窗口标题为执行函数名 */ glutCreateWindow(argv[0]); /* 调用OpenGL初始化函数 */ init(); /* 注册OpenGL绘图函数 */ glutDisplayFunc(display); /* 注册窗口大小改变时的响应函数 */ glutReshapeFunc(reshape); /* 注册键盘响应函数 */ glutKeyboardFunc(keyboard); /* 进入GLUT消息循环,开始执行程序 */ glutMainLoop(); return 0; }
编译运行方法:
gcc sphere.c -o sphere -lglut ./sphere
安装opengl,需要输入命令行:
yum list mesa* (mesa是fedora下openGL的实现,是基本库)
yum install mesa* (安装mesa*)
yum list *glut* (是openGL的一个辅助库,可用它创建与平台无关的openGL窗口)
yum install freeglut* (选择其中一个安装)