计算机图形学(二)输出图元_18_显示列表_1_创建和命名OpenGL显示表

原创 2016年05月31日 19:58:25
OpenGL显示列表
       把对象描述成一个命名的语句序列(或任何其他的命令集)并存储起来既方便又高效。在OpenGL中使用称为显示表(display list)的结构可以做到这一点。一旦建立了显示表,就可以用不同的显示操作来多次引用该表。在网格中,描述图形的显示表存放在服务器中,以避免每次显示场景时都要传送表中的命令。我们可以为以后的执行来建立并存储显示表,或指定表中的命令立即执行。显示表对层次式建模特别有用,因为一个复杂的对象可以用一组简单的对象来描述。
 
创建和命名OpenGL显示表
使用glNewList/glEndList函数对包围一组OpenGL命令就可形成显示表。例如:
glNewList  (listID, listMode);
.
.
.
glEndList ();
       该结构用赋予参数listID的正整数作为表名来形成一个显示表。参数listMode可赋以OpenGL符号常量GL_COMPILEGL_COMPILE_AND_EXECUTE之一。如果希望为以后执行而存储该表,则使用GL_COMPILE。否则,放人表中的命令立即执行,但仍然可以在以后再执行它。
       显示表创建后,立即对包含如坐标位置和颜色分量等参数的表示进行赋值计算,从而使表中仅存储参数的值。对这些参数的任何后继修改都不起作用。因为不能修改显示表的值,所以在显示表中不能包含如顶点表指针等OpenGL命令。
       我们可以创建任意多的显示表并通过调用一个标识来执行特定的显示表。一个显示表还可以嵌套在另一个显示表内。但如果一个显示表被赋予一个已经使用的标识,则它取代原来的显示表内容。因此,为了避免因故重用标识而造成显示表的丢失,可以让OpenGL生成一个标识:
listID = glGenLists (1);
       该语句将一个未使用的正整数标识赋给变量listID。如果将g1GenLists中的变量由1改成另外一个正整数,则得到一个未使用的显示表标识段。例如,假如引用g1GenLists (6),则保留6个连续正整数并将其中第一个赋给变量listID。如果有错或系统不能产生所要数量的连续整数,则返回0。因此,在使用从g1GenLists子程序获得的标识之前要先检查它是否为0。
       尽管使用g1GenList可生成未使用的标识,我们还是可以单独向系统查询指定整数值是否已用做表名。实现该功能的函数是
glIsList (listID);
如果返回值GL_TRUE,则listID中的值已经用做某显示表的名字。如果该整数尚未被使用,gtIsList函数则返回值GL_FALSE

OpenGL系列教程之七:OpenGL显示列表

相关主题:顶点缓冲区对象(VBO) 下载:displayList.zip 实现例子 显示列表是一组被存储或编译的用来以后执行的OpenGL命令的集合。当一个显示列表被创建...
  • wozhengtao
  • wozhengtao
  • 2016年09月26日 17:09
  • 2248

计算机图形学(二)输出图元_18_显示列表_2_执行OpenGL显示表

要执行的显示表数量赋给参数nLists,而参数listIDArray是显示表标识的数组。一般而言,listIDArray可包含任意多的元素,而无效的标识会被忽略。同样,listIDArray中的元素可...
  • heyuchang666
  • heyuchang666
  • 2016年06月01日 11:47
  • 3224

计算机图形学(二)输出图元_18_显示列表_2_执行OpenGL显示表

要执行的显示表数量赋给参数nLists,而参数listIDArray是显示表标识的数组。一般而言,listIDArray可包含任意多的元素,而无效的标识会被忽略。同样,listIDArray中的元素可...
  • heyuchang666
  • heyuchang666
  • 2016年06月01日 11:47
  • 3224

计算机图形学(二)输出图元_14_OpenGL像素阵列函数_1_位图函数

OpenGL中有两个函数可用于定义矩形阵列的形状或图案。一个是位图,另一个是像素图。OpenGL也提供若干的函数用于存储、复制及管理像素值阵列。函数中的参数width和height分别给出阵列bitS...
  • heyuchang666
  • heyuchang666
  • 2016年05月23日 21:24
  • 4816

计算机图形学(二)输出图元_2_ OpenGL画线函数

图形软件包一般都提供一个描述一条或多条直线段的函数,其中每一直线段由两个端点坐标位置定义。在OpenGL中,和选择一个点位置一样,我们使用glVertex函数选择单个端点的坐标位置。我们使用一对glB...
  • heyuchang666
  • heyuchang666
  • 2016年04月15日 10:59
  • 2283

计算机图形学(二)输出图元_14_OpenGL像素阵列函数_2_像素图函数

将用彩色阵列定义的图案应用到一块帧缓存的像素位置。其中的width和height也分别给出像素位图的列数和行数(阵列pixMap )。参数dataFormat用一个OpenGL常量赋值,指出如何为阵列...
  • heyuchang666
  • heyuchang666
  • 2016年05月24日 15:10
  • 964

计算机图形学(二)输出图元_11_OpenGL多边形填充区函数(下)

多数图形软件包使用逼近平面片来显示曲面。这是因为平面方程是线性的,而处理线性方程比二次或其他类曲线方程快得多。因此OpenGL和其他图形软件包提供多边形图元来实施曲面的逼近。对象用多边形网络来建模,而...
  • heyuchang666
  • heyuchang666
  • 2016年05月21日 17:52
  • 4676

计算机图形学(二)输出图元_6_OpenGL曲线函数_5_其他曲线

许多曲线函数在对象建模、动画轨迹的描述、数据和函数的图形化以及其他图形应用中是十分有用的。常见的曲线包括圆锥曲线、三角和指数函数、概率分布、通用多项式和样条函数。这些曲线的显示可采用类似于前面讨论的圆...
  • heyuchang666
  • heyuchang666
  • 2016年05月05日 16:48
  • 3461

计算机图形学(二)输出图元_6_OpenGL曲线函数_3_椭圆生成算法

通过椭圆上任一点到称为椭圆焦点的两个定点的距离可给出椭圆的精确定义:椭圆上任一点到这两点的距离之和都等于一个常数(参见图3.21 )。如果椭圆上的任一点P = (x,y)到两个焦点的距离为d1和d2,...
  • heyuchang666
  • heyuchang666
  • 2016年04月22日 15:55
  • 1696

计算机图形学(二)输出图元_6_OpenGL曲线函数_4_中点椭圆算法(上)

这里的方法类似于显示光栅圆。给定参数rx,ry和(xc,yc),首先确定以原点为中心的标准位置椭圆上的点(x,y),然后将这些点平移到以(xc,yc)为中心的椭圆上。如果希望显示不在标准位置的椭圆,那...
  • heyuchang666
  • heyuchang666
  • 2016年04月26日 18:36
  • 2119
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:计算机图形学(二)输出图元_18_显示列表_1_创建和命名OpenGL显示表
举报原因:
原因补充:

(最多只允许输入30个字)