计算机图形学(二)输出图元_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 list for a regular hexagon.
  * Vertices for the hexagon are six equally spaced
  * points around the circumference of a circle.
  */
 regHex = glGenLists (1); // Get an identifier for the display list.
 glNewList (regHex, GL_COMPILE);
    glBegin (GL_POLYGON);
      for (k = 0; k < 6; k++) {
         theta = TWO_PI * k / 6.0;
         x = 200 + 150 * cos (theta);
         y = 200 + 150 * sin (theta);
         glVertex2i (x, y);
   }
 glEnd ( );
 glEndList ();
 glCallList (regHex);

使用下列两条语句可以执行多个显示表:

 glListBase (offsetValue);
 glCallLists (nLists, arrayDataType, listIDArray);

要执行的显示表数量赋给参数nLists,而参数listIDArray是显示表标识的数组。一般而言,listIDArray可包含任意多的元素,而无效的标识会被忽略。同样,listIDArray中的元素可指定为多种数据格式,而参数arrayDataType用来指出数据类型,例如GL_BYTE,GL_INT,GL_FLOAT,
GL_3_BYTES或GL_4_ BYTES。显示表标识通过将listIDArray中一个元素的值与offsetValue的整数值相加而得。offsetValue的默认值为0。

这种指定要执行的一串显示表的机制使我们能建立一组相关的显示表,其标识用符号名或编码形成。一个典型的例子是一个字库集,其中每一显示表标识是一个字符的ASCII值。在定义几个字库时,使用glListBase函数中的offsetVaiue来获得数组listIDArray中描述的特定字库。

时间: 2024-11-06 07:24:02

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

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

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

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

OpenGL显示列表 把对象描述成一个命名的语句序列(或任何其他的命令集)并存储起来既方便又高效.在OpenGL中使用称为显示表(display list)的结构可以做到这一点.一旦建立了显示表,就可以用不同的显示操作来多次引用该表.在网格中,描述图形的显示表存放在服务器中,以避免每次显示场景时都要传送表中的命令.我们可以为以后的执行来建立并存储显示表,或指定表中的命令立即执行.显示表对层次式建模特别有用,因为一个复杂的对象可以用一组简单的对象来描述. 创建和命名OpenGL显示表 使用glNe

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

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

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

中点画圆算法 如同光栅画线算法,我们在每个步中以单位间隔取样并确定离指定圆最近的像素位置.对于给定半径r和屏幕中心(xc,yc),可以先使用算法计算圆心在坐标原点(0, 0)的圆的像素位置,然后通过将xc加到x且yc加到y.从而把计算出的每个位置(x,y)移动到其适当的屏幕位置.在第一象限中,圆弧段从x = 0到x = y,曲线的斜率从0变化到-1.0.因此,可以在该八分圆上的正x方向取单位步长,并使用决策参数来确定每一步两个可能的y位置中,哪一个更接近于圆的位置.然后,其他七个八分圆中的位置可

【计算机图形学】openGL常用函数

OpenGL常用函数   glAccum 操作累加缓冲区   glAddSwapHintRectWIN 定义一组被 SwapBuffers拷贝的三角形   glAlphaFunc允许设置alpha检测功能   glAreTexturesResident 决定特定的纹理对象是否常驻在纹理内存中   glArrayElement 定义一个被用于顶点渲染的数组成分   glBegin,glEnd 定义一个或一组原始的顶点   glBindTexture 允许建立一个绑定到目标纹理的有名称的纹理  gl

OpenGL显示列表

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

【计算机图形学】OpenGL+VS2015相关类库配置

1 WiKi OpenGL一直是事实上的计算机图形学标准,截止2016年06月,OpenGL版本已经更新到4.5.不过DirectX发展迅速,大有OpenGL落后的态势,知乎上的该话题的讨论:https://www.zhihu.com/question/23241456.所以OpenGL为了追赶DirectX,推出 了glNext(Vulkan API),相关讨论https://www.zhihu.com/question/28039310. 2 相关资料 图形学的经典书籍是<Computer

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

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

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

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