上次已经搭好了OpenGL编程的环境。已经成功运行了第一个程序。可只是照搬书上的代码,并没弄懂其中的原理。这次通过一个小程序来解释使用GLUT库编写OpenGL程序的过程。

  1. 程序的入口

    与其他程序一样main()函数是程序的入口,由(window)操作系统调用,然后我们把需要实现的代码在main()函数里调用。
  2. 设置初始显示模式

    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);定义窗口的显示模式。其中有颜色的模式和缓冲区的模式等。如果设置多种模式,中间使用“|”号隔开。例如上面的代码使用的GLUT_SINGLE是单缓冲区的模式,另一种缓冲模式是双缓冲模式。GLUT_RGB指的是颜色的模式是使用RGB染色的模式,颜色模式还有GLUT_RGBA。

    GLUT_SINGLE模式和GLUT_DOUBLE模式的区别是,GLUT_SINGLE模式的绘图命令是在显示的窗口中执行,用户(可能)会看到绘图的过程。而GLUT_DOUBLE缓冲模式的绘图过程是在显示窗口意外的场景完成,把整个绘图任务完成后,再把完成后的绘图显示到显示窗口上(用户看到的是完成后的图形)。

  3. 创建一个窗口

    glutCreateWindow(“第一个窗口”);调用GLUT库里的函数在屏幕上显示一个窗口,标题为“第一个窗口”

  4. 添加显示窗口的回调函数

    glutDisplayFunc(renderScene); 绘制窗口时,会调用renderScene(我们创建的函数,我们可以在这个函数里处理绘制窗口我们需要实现的效果)。在显示窗口或者改变窗口大小(重绘窗口)等时,就会调用我们注册的毁掉函数renderScene。

  5. 显示窗口时回调函数的内容

    void renderScene(void){
    glClear(GL_COLOR_BUFFER_BIT);
    glFlush();
    }

    glClear()函数表示清空缓冲池,参数表示需要清空的缓冲池,例如GL_COLOR_BUFFER_BIT 表示清空颜色缓冲池。如果需要清空多个缓冲池,输入的参数使用“|”隔开。

    glFlush();表示执行等待执行的OpenGL指令。由于考虑到性能的问题,并不是每一个OpenGL指令都会马上执行,经常把多个指令存放在一个指令队列中。如果调用glFlush()函数,会把所有等待执行的OpenGL指令马上执行,刷新OpenGL指令队列。

  6. 初始化渲染颜色

    glClearColor(0.0f, 0.0f, 1.0f, 1.0f);设置渲染颜色,使用RGB模式,第一个参数表示R,第二第三个分别表示G,B,最后一个表示透明度。它们的取值范围都为0.0-1.0。

  7. 循环回调

    glutMainLoop();退出该窗口前都会不断回调该函数。这个函数主要处理一些与操作系统等相关的消息。

完整代码:



运行效果:

最新文章

  1. HDU 1859
  2. matlab 中 eps 的分析
  3. AndroidManifest.xml详解(上)
  4. 安装Python时遇到如下问题,解决方案
  5. 冲刺一 (Day 2)
  6. 【BZOJ 1492】【NOI 2007】货币兑换Cash
  7. final关键字用法总结
  8. demo03linearlayoutdemo;
  9. c# Random Class usage
  10. VS2013编译OpenSSL
  11. Exams
  12. JavaSE中线程与并行API框架学习笔记1——线程是什么?
  13. Shell脚本编程入门(一)
  14. 【工具篇】Sublime Text 2 安装汉化破解、插件包安装教程详解
  15. JaveWeb学习之Servlet(一):Servlet生命周期和加载机制
  16. 网络设备监控-Catic添加H3C的监控图解
  17. 7.8CSS部分的学习!
  18. tftp 传输文件
  19. MongoDB CPU使用较高,如何排查?
  20. Cinema 4D* 中令人惊叹的体积效果

热门文章

  1. 从头认识java-16.4 nio的读与写(ByteBuffer的使用)
  2. CCFlow的excel数据源导入Dtl明细表的操作方法以及模版demo
  3. 嵌入式外部中断控制编程方法论—比較CC2541(51核)和S5PV210(ARM核)
  4. 【linux】——centos 分辨率配置
  5. 整数转罗马数字 C++实现 java实现 leetcode系列(十二)
  6. 唯品会API网关设计与实践--转
  7. Java多线程编程模式实战指南(二):Immutable Object模式--转载
  8. .net中MVC Webapi多参数调用控制器方法
  9. if switch
  10. KafkaZookeeper1-整体介绍