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),创建窗口,参数为窗口标题;
line16:glutDisplayFunc(void Fuc);glut调用用户自定义的绘图函数;
line17:glutMainLoop()事件循环主函数,就是将与“事件”相关的代码无限循环;(内存泄漏问题)
运行结果:
标签:第八版,openGL,BUFFER,0.5,300,缓冲区,原书,BIT,GL 来源: https://www.cnblogs.com/eco-just/p/10661035.html