openGL红宝书(原书第八版)案例解析一

在开始解析红宝书案例之前,先来看看之前第一个openGL程序中的demo代码:

 1 //demo.cpp
 2 
 3 #include <GL/glut.h>
 4 void display(void) {
 5     glClear(GL_COLOR_BUFFER_BIT);
 6     glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
 7     glFlush();
 8 }
 9 
10 int main(int argc, char* argv[]) {
11     glutInit(&argc, argv);
12     glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
13     glutInitWindowPosition(300, 300);
14     glutInitWindowSize(300, 300);
15     glutCreateWindow("第一个OpenGL程序");
16     glutDisplayFunc(&display);
17     glutMainLoop();
18     return 0;
19 }

这个demo代码量很少,但是麻雀虽小五脏俱全,然我们一起来看看吧。

line3:引入glut头文件;

line5:glClear(arg)表示清除指定缓冲区(可以理解为初始化背景色),可选参数如下

  • GL_COLOR_BUFFER_BIT:    当前可写的颜色缓冲
  • GL_DEPTH_BUFFER_BIT:    深度缓冲
  • GL_ACCUM_BUFFER_BIT:   累积缓冲
  • GL_STENCIL_BUFFER_BIT: 模板缓冲

line6:glRectf()表示根据左下角坐标(-0.5f,-0.5f)和右上角坐标(0.5f,0.5f)绘制矩形;

line7:glFlush(),一般情况下,我们提交给OPENGL的指令并不是马上送到驱动程序里执行的,而是放到一个缓冲区里面,等这个缓冲区满了再一次性发到驱动程序里执行;很多时候只有几条指令是填充不满那个缓冲区的,这就是说这些指令根本没有被发送到驱动里,所以我们要调用glFlush来强制把这些指令送到驱动里进行处理。

line11:glutInit(&argc, argv),固定写法,初始化 GLUT 库;

line12:glutInitDisplayMode(arg),设置显示模式,参数可以为组合参数,上述代码表示指定RGB颜色模式的窗口,指定单缓存窗口;

line13:glutInitWindowPosition(x,y),初始化设置窗口位置;

line14:glutInitWindowSiz(width,height),初始化设置窗口大小;

line15:glutCreateWindow(title),创建窗口,参数为窗口标题;

扫描二维码关注公众号,回复: 5792649 查看本文章

line16:glutDisplayFunc(void Fuc);glut调用用户自定义的绘图函数;

line17:glutMainLoop()事件循环主函数,就是将与“事件”相关的代码无限循环;(内存泄漏问题

运行结果:

猜你喜欢

转载自www.cnblogs.com/eco-just/p/10661035.html