登录 注册
当前位置:主页 > 资源下载 > 50 > 在C/C++嵌入式系统编程中,执行销毁显示列表的操

在C/C++嵌入式系统编程中,执行销毁显示列表的操

  • 更新:2024-06-23 23:46:02
  • 大小:859KB
  • 推荐:★★★★★
  • 来源:网友上传分享
  • 类别:嵌入式 - 硬件开发
  • 格式:PDF

资源介绍

四、销毁显示列表 销毁显示列表可以回收资源。使用 glDeleteLists 来销毁一串编号连续的显示列表。 例如,使用 glDeleteLists(20, 4);将销毁 20,21,22,23 这四个显示列表。 使用显示列表将会带来一些开销,例如,把各种动作保存到显示列表中会占用一定数量的内存资 源。但如果使用得当,显示列表可以提升程序的性能。这主要表现在以下方面: 1、明显的减少 OpenGL 函数的调用次数。如果函数调用是通过网络进行的(Linux等操作系统支 持这样的方式,即由应用程序在客户端发出 OpenGL 请求,由网络上的另一台服务器进行实际的 绘图操作),将显示列表保存在服务器端,可以大大减少网络负担。 2、保存中间结果,避免一些不必要的计算。例如前面的样例程序中,cos、sin 函数的计算结果被 直接保存到显示列表中,以后使用时就不必重复计算。 3、便于优化。我们已经知道,使用 glTranslate*、glRotate*、glScale*等函数时,实际上是执行矩 阵乘法操作,由于这些函数经常被组合在一起使用,通常会出现矩阵的连乘。这时,如果把这些 操作保存到显示列表中,则一些复杂的 OpenGL 版本会尝试先计算出连乘的一部分结果,从而提 高程序的运行速度。在其它方面也可能存在类似的例子。 同时,显示列表也为程序的设计带来方便。我们在设置一些属性时,经常把一些相关的函数放在 一起调用,(比如,把设置光源的各种属性的函数放到一起)这时,如果把这些设置属性的操作装 入到显示列表中,则可以实现属性的成组的切换。 当然了,即使使用显示列表在某些情况下可以提高性能,但这种提高很可能并不明显。毕竟,在 硬件配置和大致的软件算法都不变的前提下,性能可提升的空间并不大。 显示列表的内容就是这么多了,下面我们看一个例子。 假设我们需要绘制一个旋转的彩色正四面体,则可以这样考虑:设置一个全局变量 angle,然后让它的值不 断的增加(到达 360 后又恢复为 0,周而复始)。每次需要绘制图形时,根据 angle 的值进行旋转,然后绘 制正四面体。这里正四面体采用显示列表来实现,即把绘制正四面体的若干 OpenGL 函数装到一个显示列 表中,然后每次需要绘制时,调用这个显示列表即可。 将正四面体的四个顶点颜色分别设置为红、黄、绿、蓝,通过数学计算,将坐标设置为: (-0.5, -5*sqrt(5)/48, sqrt(3)/6), ( 0.5, -5*sqrt(5)/48, sqrt(3)/6), ( 0, -5*sqrt(5)/48, -sqrt(3)/3), ( 0, 11*sqrt(6)/48, 0) 2007 年 4 月 24 日修正:以上结果有误,通过计算 AB, AC, AD, BC, BD, CD 的长度,发现 AD, BD, CD 的 长度与 1.0 有较大偏差。正确的坐标应该是: A 点:( 0.5, -sqrt(6)/12, -sqrt(3)/6) B 点:( -0.5, -sqrt(6)/12, -sqrt(3)/6) C 点:( 0, -sqrt(6)/12, sqrt(3)/3) D 点:( 0, sqrt(6)/4, 0)