2011-11-26 58 views
1

警告:試圖學習OpenGL ...Apple OpenGL:爲什麼我用glVertexAttribPointer繪製一個多邊形只是摺疊一個正方形?

我用下面的代碼繪製了一個正方形。

static const GLfloat squareVertices[] = { 
     -0.5f, -0.33f, 
     0.5f, -0.33f, 
     -0.5f, 0.33f, 
     0.5f, 0.33f, 
    }; 

... 

     glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, squareVertices); 
     glEnableVertexAttribArray(ATTRIB_VERTEX); 
... 

     glVertexPointer(2, GL_FLOAT, 0, squareVertices); 

自然,我想添加兩個頂點並得到一個六邊形。相反,我有像摺紙一樣摺疊的正方形:

static const GLfloat hexagonVertices[] = { 
     -0.5f, -0.33f, 
     +0.0f, -0.66f, 
     +0.5f, -0.33f, 
     +0.75f, +0.33f, 
     -0.1f, +0.5f, 
     +0.25f, +0.33f, 
    }; 

... 

     glVertexAttribPointer(ATTRIB_VERTEX, 3, GL_FLOAT, 0, 0, hexagonVertices); 
     glEnableVertexAttribArray(ATTRIB_VERTEX); 

... 

     glVertexPointer(3, GL_FLOAT, 0, hexagonVertices); 

我甚至嘗試改變頂點以影響形狀。我可以將廣場變成一個不規則的四邊形多邊形,我可以歪斜「六邊形」,但它仍然只是一張摺疊的紙。

我可以這樣做嗎?

什麼是首選替代方式?

回答

1

您的問題來自於glVertexAttribPointer

的第二個參數發送的值3這就告訴OpenGL使用每個頂點的3個座標,而不是你希望兩個。由於你有12個浮點,所以它變成了4個頂點,因此是方形。

編輯:哦,你需要glVertexPointer的第一個參數也是2。

+0

謝謝 - 我以爲我原本保持參數爲「2」,但我一次改變多件事。我現在有一個方形,五角形和六角形。我仍然不太清楚頂點的順序 - 我一直在思考一個路徑。我必須繼續閱讀...... – mobibob