显示列表是一组OpenGL函数调用,被存储起来供以后执行(有点类似 SQL 中的存储过程),调用显示列表时,将按顺序执行其中的函数。
显示列表的使用目的
1.如果要绘制一个几何体多次,或者需要对一组状态作相同的变更。注意每次执行一个显示列表之前必须相应得设置模型视点举证,以计算物体的正确大小和位置。
2.C/S 模式下的应用程序,显示列表是服务器状态的一部分,它们驻留在服务器中,因此通过将需要重复执行的函数存储在显示列表中可以避免通过网络重复传输这些数据,从而降低开销。
显示列表使用步骤
1. 生成显示列表索引:
每个显示列表都由一个整数索引表示。GLuint glGenLists( GLsizei range ),它分配range个相邻的,未分配的显示列表索引,返回其中第一个显示列表的索引。并把它们都标记为占用。
2. 定义一个显示列表:
/**参数 list: 索引号
参数 mode: 可以取值为 GL_COMPILE 和 GL_COMPILE_AND_EXECUTE
前者表示只想把接下来的函数存储在显示列表中,而不执
行;后者表示要立即执行,再放入显示列表
*/
/** GL_COMPILE类似于编程。在你写程序的时候,把它装载到编译器里,你每次运行程序都需要重新编译。而如果他已经编译成了.exe文件,那么每次你只需要点击那个.exe文件就可以运行它了,不需要编译。当OpenGL编译过显示列表后,就不需要再每次显示的时候重新编译它了。这就是为什么用显示列表可以加快速度。
*/
void glNewList( GLuint list, GLenum mode );
//插入要执行的函数,这里的函数不能是那些会改变列表的函数
//…
/**标记显示列表的结尾*/
void glEndList( void );
3. 执行显示列表
void glCallList( GLuint list );
如何使纹理具有指定颜色
glEnable(GL_COLOR_MATERIAL);