OpenGL 繪製大量頂點

  我們知道在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);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章