您的位置:首页 > 运维架构

OpenGL简介--显示列表

2011-09-13 15:20 190 查看
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参数是一个数组的地址,其值是一些偏移量,显示列表基数加上偏移量就是将要执行的显示列表的序列号。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: