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)

分配range个相邻的未被占用的显示列表索引。这个函数返回的是一个正整数索引值,它是一组连续空索引的第一个值。返回的索引都标志为空且已被占用,以后再调用这个函数时不再返回这些索引。若申请索引的指定数目不能满足或range为0则函数返回0。
 
(2)GLboolean glIsList(GLuint list);

 询问显示列表是否已被占用的情况。若索引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();

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值