我們知道在OpenGL中繪製一些簡單的實體的時候,只要將實體的頂點按照正確的順序列舉出來即可
如畫一個六面體
只要在繪製函數中添加:
glBegin(GL_QUADS);
glVertex3f( 1.0, 1.0, -1.0 );
glVertex3f( -1.0, 1.0, -1.0 );
glVertex3f( -1.0, 1.0, 1.0 );
glVertex3f( 1.0, 1.0, 1.0 );
glVertex3f( 1.0, -1.0, 1.0 );
glVertex3f( -1.0, -1.0, 1.0 );
glVertex3f( -1.0, -1.0, -1.0 );
glVertex3f( 1.0, -1.0, -1.0 );
glVertex3f( 1.0, 1.0, 1.0 );
glVertex3f( -1.0, 1.0, 1.0 );
glVertex3f( -1.0, -1.0, 1.0 );
glVertex3f( 1.0, -1.0, 1.0 );
glVertex3f( 1.0, -1.0, -1.0 );
glVertex3f( -1.0, -1.0, -1.0 );
glVertex3f( -1.0, 1.0, -1.0 );
glVertex3f( 1.0, 1.0, -1.0 );
glVertex3f( -1.0, 1.0, 1.0 );
glVertex3f( -1.0, 1.0, -1.0 );
glVertex3f( -1.0, -1.0, -1.0 );
glVertex3f( -1.0, -1.0, 1.0 );
glVertex3f( 1.0, 1.0, -1.0 );
glVertex3f( 1.0, 1.0, 1.0 );
glVertex3f( 1.0, -1.0, 1.0 );
glVertex3f( 1.0, -1.0, -1.0 );
glEnd();
即可,但是如果是一個不規則的實體,而且數據量很大的時候,我們可以選擇使用頂點數組來實現,把要繪製的實體的頂點座標,紋理座標(如果需要貼紋理),顏色信息,存放在數組中,然後將頭指針傳給下面的API即可
比如GLfloat *m_pos,*m_texture中存放了頂點座標和紋理座標,GLushort *m_indices中存放了索引信息 ,int numVertices 是索引個數那這個實體就可以使用下面的方法進行繪製了
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);glVertexPointer(3,GL_FLOAT,3*sizeof(GLfloat),m_pos);
glTexCoordPointer(2,GL_FLOAT,2*sizeof(GLfloat),m_textures);
glDrawElements(GL_TRIANGLES, numIndices, GL_UNSIGNED_SHORT, m_indices);