OpenGL顶点数组

1 typedef GLint vertex3[3];
2     vertex3 pt[8] = { {0,0,0}, {0,1,0}, {1,0,0}, {1,1,0}, 
3                             {0,0,1}, {0,1,1}, {1,0,1}, {1,1,1} };

若要定义该对象的六个面需要调用六次glBegin(GL_POLYGON)或glBegin(GL_QUADS)。而且每个面的顶点顺序必须符合从立方体外部对其观察时为逆时针次序。

为了简化,OpenGL提供顶点数组,只是使用少量的函数调用。

1 glEnableClientState(GL_VERTEX_ARRAY);
2 glVertexPointer(3, GL_INT, 0, pt);
3 
4 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);
5 glDrawElements(GL_QUADS, 24, GL_UNSIGNED_BYTE, vertIndex);

glEnableClientState(GL_VERTEX_ARRAY)激活OpenGl的顶点数组特性。glDisableClientState(GL_VERTEX_ARRAY)可使顶点数组特性无效。

glVertexPointer函数提供对象顶点坐标的位置格式。第一个参数表示描述一个顶点的坐标数目;第二个参数表示顶点坐标的数据类型;第三个参数表示连续顶点之间的字节位移,其目的是允许多种类型的数据捆绑在同一个数组内;最后一个参数指向坐标值的顶点数组。

数组vertIndex中存放的是立方体顶点的所有索引(数组pt的下标),作为glDrawElements函数的最后一个参数被第一个参数GL_QUADS使用。第二个参数指定vertIndex数组中的元素数量。第三个参数是索引值的类型。三种索引类型为GL_UNSIGNED_BYTE、GL_UNSIGNED_SHORT和GL_UNSIGNED_INT。

原文地址:https://www.cnblogs.com/clairvoyant/p/5550048.html