执行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