前言
我写的东西大部分是我学习的体会或是工作中遇到问题,所以很多东西可能不是很“精准”,但我尽量做到好理解、好使用。
如果想比较系统学习opengl可以先从一本叫《opengl超级宝典》的书入手,而且我建议对于没有任何opengl的基础的人要看这本书的第四版。因为,opengl在发展过程中以opengl2.0为分界,经历了一个由固定管线到可编程管线的变化,书的第四版还考虑了这个过度性,所以好理解一些,第四版以后干脆不讲固定管线的内容,我觉得不好上手。另外从实用的角度上说,还有很多古老的代码是以固定管线为基础的,对于一些要求不高的场合,固定管线的方式也更方便、简洁。
另外,如果能弄到英文版的书,我建议读英文版的,我个人觉得调理更清晰一些。另外,代码都是英文写的,阅读英文书籍的时候,会积累一些专业性的单词,对于将来理解他人(尤其是开源项目)代码是很有好处的。
1.opengl相关库的安装
首先,ubuntu14.04版本已经默认安装了opengl的核心库,如果你的ubuntu没有,可执行如下命令:
$ sudo apt-get install libgl1-mesa-dev*
这会给出一个有关ubuntu的gl库的列表,你可以选择一个安装。我的ubuntu是14.04.1,安装了libgl1-mesa-dev-lts-utopic。
然后,安装如下库:
$ sudo apt-get install build-essiontial
$ sudo apt-get install libglu1-mesa-dev
$ sudo apt-get install freeglut3-dev
其中freeglut3是glut的一个开源实现(glut本身没有开源实现,所以有两个人就自己做了一套叫freeglut),而libglu是libgl库的进一步封装,提供一些易用的接口。
可以这样解释gl、glu、glut三者的关系,gl是最基本的库,但提供的函数接口用起来很复杂,可能画一条线就要调用7、8个接口,glu就把一些常用gl的接口调用封装为一个接口,增加易用性。而glut提供了一个与平台无关的窗口系统。至于什么是窗口系统,如果没有一定的背景知识,也很不好解释,所以现在无需明白,在后面深入学习了opengl的相关概念之后,就可以很快明白。
2.一个简单的例子
配置完相应的环境后,我们可以先跑一个简单的例子,测试环境配置是否正确。
#include <GL/glut.h>
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
//glBegin(GL_POINTS);
//glEnd();
glRectf(-0.5f,-0.5f,0.5f,0.5f);
glFlush();
return;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(0, 0);
glutInitWindowSize(300, 300);
glutCreateWindow("OpenGL 3D View");
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
将以上代码保存为test.c文件,然后执行如下编译命令:
$ gcc ./test.c -lGL -lGLU -lglut
编译成功后会生成一个a.out
文件,执行这个文件会得到如下结果。
可以看出我们成功绘制了一个白色的正方形。