OpenGL显示列表是一组预先存储起来的OpenGL命令。显示列表可以在任何地方被调用,并按顺序立即执行。 要应用显示列表,首先要用glNewLish()和glEndList()创建一个显示列表。 void glNewList(GLuint list,GLenum mode); void glEndList(void); list参数为显示列表序号;mode参数表示显示列表处理的方式,可以为GL_COMPILE或GL_COMPILE_AND_EXECUTE. GL_COMPILE表示显示列表中的命令仅被编译,GL_COMPILE_AND_EXECUTE表示其中的命令不仅被编译而且被立即执行。 OpenGL显示列表主要用于 (1)由大量数据构成的几何模型,且是多次调用或是几何模型要发生运动。 (2)较高维的矩阵操作。 (3)光栅位图、图像和纹理操作。 (4)光照计算。 (5)OpenGL实用库中标准二次曲面、Besier曲线及曲面、NURBS曲线及曲面的绘制。 OpenGL用glCallList(GLuint list)进行显示列表的调用。List表示显示列表的序列号。 调用显示列表时应当注意: (1)显示列表中所用函数的参数值是当前的,不会受今后变换的影响。 (2)封装在显示列表中的变换操作会对今后绘制图像产生影响。 (3)对于显示列表不可进行外部干预 (4)并非所有的OpenGL函数都能在显示列表中通过。不能通过的函数列表如下: glIsList() glGenLists() glDeleteLists() glFeedbackBuffer() glSelectBuffer() glRenderMode() glFlush() glFinish() glIsEnable() glGet() (5)一个显示列表由其序列号来识别,如果定义一个相同序列号的显示列表,则后定义的显示列表会代 替已存在的显示列表。为了避免潜在的危险,可以用 GLuint glGenLists(GLsizei range) 来创建一个或多个没有用过的显示列表。 该函数创建range个连续且未被占用的显示序列号,返回一个整数n,由它创建的range个显示序列号为n,n+1,….n+range-1。 在对显示列表进行管理时,可以对显示列表进行查询。对给定的序列号查证他是否被使用过。通过 glIsList()完成。GLboolean glIsList(GLuint list); 显示列表可以通过glDeleteLists()删除显示列表。 void glDeleteLists(GLuint list , GLsizei range);该函数删除从list起的连续range个显示序列。 要直接输出一串位图文字,可以用显示列表完成,这时需要如下两个函数配合使用 void glListBase(GLuint base);glListBase()为glCallLists()设置显示列表基数 void glCallLists(GLsizei n,GLenum type,const GLvoid * lists); 其中,n为将要执行的显示列表的个数;type 表示lists参数的类型,可以为GL_BYTE,GL_UNSIGNED_BYTE,GL_SHORT,GL_UNSIGNED_SHORT,GL_INT,GL_UNSIGNED_INT,GL_FLOAT,GL_2_BYTES,GL_3_BYTES,GL_4_BYTES;list参数是一个数组的地址,其值是一些偏移量,显示列表基数加上偏移量就是将要执行的显示列表的序列号。 |
OpenGL简介--显示列表
最新推荐文章于 2021-05-22 05:25:47 发布