标签:
OpenGL顶点数组GLint points [8][3] = {{0,0,0},{0,1,0},{1,0,0},{1,1,0},{0,0,1},{0,1,1},{1,0,1},{1,1,1}};也可以先定义一个三维顶点位置的数据类型,然后给出作为单下标数组元素的每一顶点位置的坐标,
typedef GLint vertex3 [3]; vertex3 pt [8] = {{0,0,0},{0,1,0},{1,0,0},{1,1,0},{0,0,1},{0,1,1},{1,0,1},{1,1,1}};
下面要定义该对象的六个面。为此,分六次调用glBegin (GL_POLYGON}或glBegin(GL_QUADS)。我们必须明确每一个面的顶点顺序符合从立方体外部对其观察时为逆时针次序的要求。在下面的程序段中,我们指定每个立方体面为一个四边形,并且使用一个函数调用将数组下标值传给OpenGL图元子程序。图3.59给出了与立方体顶点位置对应的数组pt的下标值。
void quad (Glint n1, Glint n2, Glint n3, Glint n4) { glBegin (GL_QUADS); glVertex3iv (pt [n1]); glVertex3iv (pt [n2]); glVertex3iv (pt [n3]); glVertex3iv (pt [n4]); glEnd (); } void cube () { quad(6, 2, 3, 7); quad(5, 1, 0, 4); quad(7, 3, 1, 5); quad(4, 0, 2, 6); quad(2, 0, 1, 3); quad(7, 5, 4, 6); }这样,指定一个面要用六个OpenGL函数,共有六个面需要指定。在加入颜色描述和其他参数后,显示立方体的程序很容易包含一百个以上的OpenGL函数调用。而有许多复杂对象的场景会需要更多的函数调用。
glEnableClientState (GL_VERTEX_ARRAY); glVertexPointer (3, GL_INT, 0, pt); GLubyte vertIndex [] = (6, 2, 3, 7, 5, 1, 0, 4, 7, 3, 1, 5, 4, 0, 2, 6, 2, 0, 1, 3, 7, 5, 4, 6); glDrawElements (GL_QUADS, 24, GL_UNSIGNED_BYTE, verIndex);第一条命令glEnableClientState (GL_VERTEX_ARRAY),激活了客户/服务器系统中客户端的能力(此时是顶点数组)。因为客户端(运行主程序的机器)保留图形的数据,顶点数组必须在那里。如第2章所指出的,服务器(如工作站)发出命今并显示图形。当然,单个计算机既是客户端又是服务器。OpenGL的顶点数组特性用下列命令来使其无效。
计算机图形学(二)输出图元_10_多边形填充区_8_OpenGL顶点数组
标签:
原文地址:http://blog.csdn.net/heyuchang666/article/details/51471704