当前位置:嗨网首页>书籍在线阅读

15-补充说明

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

补充说明

在本章中,还有很多我们没有讨论到的OpenGL管线细节。我们略过了许多内部阶段,同时完全省略了纹理的处理。我们在本章的目标是,对后面要用来编码的框架有尽可能简单的整体印象。当我们继续学习时,会学到更多的细节。同时我们也推迟了展示曲面细分着色器和几何着色器的代码。在之后的章节中,我们会构建一套完整的系统,来展现如何为每个阶段编写实际的着色器。

对于如何组织场景动画代码,尤其是线程管理,有着更复杂的方法。有的语言中的库,如JOGL和LWJGL(对于Java)会提供一些支持动画的类。我们鼓励对于设计特定应用渲染循环(或者“游戏循环”)感兴趣的读者去读一些在游戏引擎设计上更加专业的图书[NY14],同时跟踪在gamedev.net [GD17]上的讨论。

我们在glShaderSource()命令上注释了一个细节。它的第四个参数指定了一个“长度数组”,其中包括给定着色器程序中每行代码的字符串的整数长度。如果这个参数被设为null,像我们之前那样,OpenGL将会自动从以null结尾的字符串中构建这个数组。因此我们特地确保所有我们传给glShaderSource()的字符串都是以null结尾的[通过在createShaderProgram()中调用c_str()函数]。实际中通常也会遇到手动构建这些数组而非传入null的应用程序。

在本书中,读者可能多次想要了解OpenGL某些方面的数值限制。例如,程序员可能需要知道几何着色器可以生成的最大输出数,或者可以为渲染点指定的最大尺寸。这些值中很多都依赖于实现,即在不同的机器上是不同的。OpenGL提供了通过使用glGet()指令来获取这些值的机制。基于查询的参数的不同类型,glGet()指令也有着不同的形式。例如,查询点的尺寸的最大值时,如下调用会将最小值和最大值(基于运行机器上的OpenGL实现)放入名为“size”的数组中的前两个元素。

glGetFloatv(GL_POINT_SIZE_RANGE, size)

这类查询有很多。更多示例参见OpenGL参考文档[OP16]

在本章中,我们尝试在每次OpenGL调用时,描述其各个参数。当我们向后推进时,这么做就会显得冗余,因此当我们觉得描述参数只会妨碍理解时,就不会描述该参数。这是因为很多OpenGL函数有大量与我们示例无关的参数。必要时读者应当使用OpenGL文档来获取参数详情。