OpenGL简介--显示列表


OpenGL显示列表是一组预先存储起来的OpenGL命令。显示列表可以在任何地方被调用,并按顺序立即执行。

要应用显示列表,首先要用glNewLish()glEndList()创建一个显示列表。

     void glNewList(GLuint list,GLenum mode);

     void glEndList(void);

     list参数为显示列表序号;mode参数表示显示列表处理的方式,可以为GL_COMPILEGL_COMPILE_AND_EXECUTE.

     GL_COMPILE表示显示列表中的命令仅被编译,GL_COMPILE_AND_EXECUTE表示其中的命令不仅被编译而且被立即执行。

OpenGL显示列表主要用于

(1)由大量数据构成的几何模型,且是多次调用或是几何模型要发生运动。

(2)较高维的矩阵操作。

(3)光栅位图、图像和纹理操作。

(4)光照计算。

(5)OpenGL实用库中标准二次曲面、Besier曲线及曲面、NURBS曲线及曲面的绘制。

OpenGLglCallList(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个显示序列号为nn+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参数是一个数组的地址,其值是一些偏移量,显示列表基数加上偏移量就是将要执行的显示列表的序列号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值