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

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

时间: 2024-11-06 07:21:26

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

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

执行OpenGL显示表 采用下面的语句可执行一个显示表: glCallList (listID); 下面的程序段用于创建并执行一个显示表.我们先在xy平面上建立以(200,200)为中心坐标.半径为150的圆周上六个等距顶点描述的规则六边形的显示表.然而调用glCallList来显示该六边形. const double TWO_PI = 6.2831853; GLuint regHex; GLdouble theta; GLint x, y, k; /* Set up a display lis

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

删除 OpenGL 显示表 要删除连续的一组显示表,可调用函数: glDeleteLists (startID, nLists); 参数startID给出最前面的显示表标识,而参数nLists给出要删除的显示表总数.例如,语句: glDeleteLists (5, 4); 删除4个显示表,其标识为5, 6, 7和8.没有显示表对应的标识被忽略.

计算机图形学(二)输出图元_19_显示窗口重定形函数

OpenGL显示窗口重定形函数 在介绍性的OpenGL程序中,我们讨论了建立初始显示窗口的函数.但是在生成图形后,常需要用鼠标将显示窗口拖到屏幕的另一位置或改变其形状.改变显示窗口的尺寸可能改变其纵横比并引起对象形状的改变. 为了允许对显示窗口尺寸的改变做出反应,GLUT库提供下面的函数: glutReshapeFunc(winReshapeFcn); 该函数可和其他GLUT函数一起放在程序的主过程中,它在显示窗口尺寸输入后立即激活.该GLUT函数的变量是接受新窗口宽度和高度的过程名.我们可以接

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

OpenGL曲线函数 生成圆和椭圆等基本曲线的函数并未作为图元功能包含在OpenGL核心库中.但该库包含了显示Bezier样条的功能,该曲线是由一组离散点定义的多项式.OpenGL实用库(GLU)中包含有球面和柱面等三维曲面函数以及生成B样条的函数,它是包含简化Bezier曲线的样条曲线的总集.我们可以使用有理B样条显示圆.椭圆和其他二维曲线.此外,OpenGL实用工具包(GLUT)中还有可以用来显示某些三维曲面(如球面.锥面和其他形体)的函数.然而,所有这些函数比本章中介绍的基本图元应用得更多

显示列表

显示列表一组已经存储(编译)的OpenGL命令,以供后续执行.一旦显示列表创建出来,所有顶点与像素数据都被赋值且拷贝到服务器段的显示列表内存.这是一次性过程.在显示列表配备(编译)好后,你可以重复使用它,而不需要每帧都重新赋值与重新反复传递数据.显示列表是绘制静态数据的最快方式之一,这是因为顶点数据与OpenGL命令被存储在显示列表中并且最小化客户端到服务器段的数据传输.也就是说,它降低CPU处理实际数据传输的周期. 显示列表的另一个重要性能是:由于显示列表是服务端数据,它可以在多个客户端共享.

计算机图形学(二)输出图元_20_章节总结(上)

输出图元章节总结 发了好久第2章终于结束了,本章中讨论的输出图元为使用直线.曲线.填充区域.单元阵列样式和文本构造图形提供了基本的工具.我们通过在笛卡儿世界坐标系统中给出几何描述来指定图元. 用于沿线段路径绘制像素的三种方法是DDA算法.Bresenham算法和中点算法,Bresenham算法和中点算法是等同的并且是最有效的.沿线段路径的像素的颜色位存储按照递增地计算内存地址的方式而有效完成.任何线段生成算法都可以通过分割线段并将分割的线段分布到可用处理器上来获得并行的实现. 圆和椭圆采用中点算

计算机图形学(二)输出图元_10_多边形填充区_1_多边形分类和识别

多边形填充区 一个多边形(polygon)在数学上定义为由三个或者更多称为顶点的坐标位置描述的平面图形,这些顶点由称为多边性的边(edge或者side)顺序连接.进一步来看,几何上要求多边形的边除了端点之外没有其他公共点.因此,根据定义,一个多边形在其单一平面上必须有其所有的顶点且边之间无交叉.多边形的例子有三角形.矩形.八边形和十六边形等.有时,任一有封闭折线边界的平面图形暗指一个多边形,而若其没有交叉边则称为标准多边形(( standard polygon)或简单多边形( simple po

计算机图形学和OpenGL(二)坐标系和绘制点线函数

这节开始前我们先了解一下图元的概念.图形软件包中用来描述各种图形元素的函数称为图形输出原语,也称图元(primitive).而描述对象几何要素的输出图元一般称为几何图元.点和线是最简单的几何图元,本节就会简单介绍点和线段的绘制方法. 一.坐标系统. 坐标系统一般分为屏幕坐标和OpenGL中的绘图坐标. 在上一节中我们简单的写了个示例程序,程序中介绍了gluOrtho2D命令.我们可以利用该命令设定一个二维笛卡尔坐标系.该函数的四个变量制定的是显示图形x和y坐标范围.所以我们可以使用下面代码制定一

【计算机图形学课程】二.MFC鼠标响应函数模拟画图软件

上一篇文章我们讲述MFC绘制图形的基本函数,包括绘制直线.绘制矩形.绘制椭圆及绘制文字,同时通过绕圆旋转和矩形平移简单的理解了图形学知识.这篇文章我将介绍鼠标响应和键盘响应,通过这些事件让学生实现一个类似画图的简单软件,同时充分发挥学生想象,自己创作东西.        前文:       [计算机图形学课程]一.MFC基本绘图函数使用方法 一. MFC工程创建及鼠标响应 新建一个MFC 单文档的应用程序"MousePic". 然后,选择"View(视图)"->