1.       什么时候使用显示列表:

多次重绘同一图形或需要多次调用用于更改状态的函数。由于显示列表本身也有一定的开销,所以当重绘图形太小时,使用显示列表不一定能提高效率

2.       哪些时候用显示列表:

a)         矩阵操作;

b)        对位图和图像进行光栅化;

c)        光晕、材质属性和光照模型;

d)        多边形电话模式

e)         我们常把纹理数据存在纹理对象而不使用显示列表是为了优化纹理图像

3.       它有哪些缺点:

a)         显示列表本身有一定的开销;

b)        显示列表一经定义不能修改;

c)        显示列表不能读取;

d)        在显示列表中,调用变换函数能对后面的绘图产生影响;

e)         当把表达式放在显示列表中时,实际上只有表达式的值存储在显示列表中,后期如果改变了表达式变量的值,这种变化不能体现在显示列表中

4.       如何定义一个显示列表:

通过glNewList(listName,mode) glEndList()界定一个显示列表,其中listName是一个整型索引值,由glGenList()函数产生,也可以通过glIsList() 判断某个指定的索引是不是被使用过的。mode 可以选用的值是GL_COMPILEGL_COMPILE_AND_EXECUTEGL_COMPILE表示将这些函数放在显示列表中,但不立即执行显示列表中的函数,GL_COMPILE_AND_EXECUTE表示将这些函数放在显示列表中并立即执行。

5.       如何调用一个显示列表

我们通过调用glCallList()来调用一个定义好的显示列表。显示列表支持嵌套调用但层次有限制,这个限制最少是64,这个限制取决于OpengGL的实现。

6.      为了在显示列表中进行状态变换又不改变原来的状态,我们可以调用glPushAttrib()glPushMatrix()来保存原来的状态,并使用glPopAttrib()glPopMatrix()来还原原来的状态。

posted on 2008-10-30 14:50  忘我和尚  阅读(612)  评论(0编辑  收藏  举报