计算机图形学(二)输出图元_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命令的集合。当一个显示列表被创建...

OpenGL(八) 显示列表

OpenGL在即时模式(Immediate Mode)下绘图时,程序中每条语句产生的图形对象被直接送进绘图流水线,在显示终端立即绘制出来。当需要在程序中多次绘制同一个复杂的图像对象时,这种即时模式会消...
  • dcrmg
  • dcrmg
  • 2016年11月11日 22:27
  • 1261

计算机图形学(二)输出图元_18_显示列表_3_删除 OpenGL 显示表

删除 OpenGL 显示表参数startID给出最前面的显示表标识,而参数nLists给出要删除的显示表总数...

untiy 3d ShaderLab_第8章_3_ 单光贴图和Forward 渲染路径

在单光照贴图的情况下,Camera的RenderingPath为VertexLit时,有一个不理想的地方就是被烘焙过的静态物体,默认的材质不会受到实时光照的影响。当然,可以通过提供自定义的材质改变这一...

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

要执行的显示表数量赋给参数nLists,而参数listIDArray是显示表标识的数组。一般而言,listIDArray可包含任意多的元素,而无效的标识会被忽略。同样,listIDArray中的元素可...

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

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

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

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

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

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

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

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

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

将用彩色阵列定义的图案应用到一块帧缓存的像素位置。其中的width和height也分别给出像素位图的列数和行数(阵列pixMap )。参数dataFormat用一个OpenGL常量赋值,指出如何为阵列...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:计算机图形学(二)输出图元_18_显示列表_1_创建和命名OpenGL显示表
举报原因:
原因补充:

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