游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3620|回复: 6

请问OpenGL的显示列表的原理是什么?

[复制链接]

12

主题

33

帖子

37

积分

注册会员

Rank: 2

积分
37
发表于 2007-7-28 15:05:00 | 显示全部楼层 |阅读模式
    请问各位高手, OpenGL中的显示列表原理是什么? 具体实现是怎么样的?可以用C/C++ 编写吗? [em24]

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2007-7-28 18:52:00 | 显示全部楼层

Re:请问OpenGL的显示列表的原理是什么?

预编译原理。

glNewList(1,GL_COMPILE);//开始定义
这里写 OpenGL代码
glEndList();结束定义

glCallList(1);//调用

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-7-28 23:06:00 | 显示全部楼层

Re:请问OpenGL的显示列表的原理是什么?

OpenGL显示列表(Display List)是由一组预先存储起来的留待以后调用的OpenGL函数语句组成的,当调用这张显示列表时就依次执行表中所列出的函数语句。前面内容所举出的例子都是瞬时给出函数命令,则OpenGL瞬时执行相应的命令,这种绘图方式叫做立即或瞬时方式(immediate mode)。本章将详细地讲述显示列表的基本概论、创建、执行、管理以及多级显示列表的应用等内容。

  OpenGL显示列表的设计能优化程序运行性能,尤其是网络性能。它被设计成命令高速缓存,而不是动态数据库缓存。也就是说,一旦建立了显示列表,就不能修改它。因为若显示列表可以被修改,则显示列表的搜索、内存管理的执行等开销会降低性能。
  采用显示列表方式绘图一般要比瞬时方式快,尤其是显示列表方式可以大量地提高网络性能,即当通过网络发出绘图命令时,由于显示列表驻留在服务器中,因而使网络的负担减轻到最小。另外,在单用户的机器上,显示列表同样可以提高效率。因为一旦显示列表被处理成适合于图形硬件的格式,则不同的OpenGL实现对命令的优化程度也不同。例如旋转矩阵函数glRotate*(),若将它置于显示列表中,则可大大提高性能。因为旋转矩阵的计算并不简单,包含有平方、三角函数等复杂运算,而在显示列表中,它只被存储为最终的旋转矩阵,于是执行起来如同硬件执行函数glMultMatrix()一样快。一般来说,显示列表能将许多相邻的矩阵变换结合成单个的矩阵乘法,从而加快速度。

12

主题

33

帖子

37

积分

注册会员

Rank: 2

积分
37
 楼主| 发表于 2007-7-28 23:13:00 | 显示全部楼层

Re:请问OpenGL的显示列表的原理是什么?

列表中有glVertex*,不会每次都调用吧?我的理解是每次只调用glEnd()。其他的在glBegin()和glEnd()之间的函数都只调用一次吧?
如果想写相似的函数,该如何实现呢?

12

主题

33

帖子

37

积分

注册会员

Rank: 2

积分
37
 楼主| 发表于 2007-7-29 16:45:00 | 显示全部楼层

Re:请问OpenGL的显示列表的原理是什么?

哪里能找到这几个函数的实现代码阿?

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2007-7-29 17:12:00 | 显示全部楼层

Re:请问OpenGL的显示列表的原理是什么?

www.baidu.com

12

主题

33

帖子

37

积分

注册会员

Rank: 2

积分
37
 楼主| 发表于 2007-8-1 10:58:00 | 显示全部楼层

Re:请问OpenGL的显示列表的原理是什么?

呵呵,你以为百度是万能的阿。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 15:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表