OpenGL-显示列表

1. 显示列表如何提高性能

 

(1)可以定义一个几何图形,在以后多次执行它。

 

(2)当通过网络在另一台远程机器上运行OpenGL程序时,显示列表存放在服务器上,于是可以大大减少网络的数据传输量。

 

2. 显示列表在以下领域可以体现优化作用

 

(1)矩阵操作

 

如一个glRotate函数,可能会有相当大得性能提升,因为产生旋转矩阵的计算是比较复杂的

 

(2)对位图和图像进行光栅化

 

程序所指定的光栅化数据的格式并不一定最合适硬件,在编译显示列表时,OpenGL可能会把数据转换为最适合硬件的形式。

 

(3)光源、材料属性和光照模型

 

3. 创建和执行显示列表

 

GLuint listName;

listName = glGenLists(1);

 

glNewList(listName, GL_COMPILE);

...

glEndList();

glCallList(listName);

 

4. 显示列表的管理

 

(1)GLuint glGenList(GLsizei range)


(2)GLboolean glIsList;

 询问显示列表是否已被占用的情况。若索引list已被占用,则函数返回TURE;反之,返回FAULSE。

 

(3)glDeleteLists(GLuint list,GLsizei range);

 

删除从list开始的range个显示列表

 

5.层次式显示列表

 

glNewList(listIndex, GL_COMPILE);

 

glCallList(list1);

glCallList(list2);

 

glEndList();

 

6. 用显示列表管理状态变量

 

glNewList(listIndex, GL_COMPILE);

glPushMatrix();

glPushAttrib(GL_CURRENT_BIT);

...

glPopAttrib();

glPopMatrix();

 

封闭模式修改:

 

GLuint offset;

offset = glGenLists(3);

 

glNewList( offset, GL_COMPILE);

glDisable(GL_LINE_STIPPLE);

glEndList();

 

glNewList( offset+1, GL_COMPILE);

glEnable(GL_LINE_STIPPLE);

glEndList();

 

 

glCallList(offset);

drawLine();

 

glCallList(offset+1);

drawLine();

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章