首页 > 其他 > 详细

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

时间:2019-04-06 12:03:58      阅读:138      评论:0      收藏:0      [点我收藏+]

在开始解析红宝书案例之前,先来看看之前第一个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红宝书(原书第八版)案例解析一

原文:https://www.cnblogs.com/eco-just/p/10661035.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!