2013-04-12 99 views
2

我用OpenGL 4.3編寫了一個簡單的程序,它顯示了一個三角形,四邊形和五邊形。我在以下數組中定義了頂點:使用OpenGL 4.3創建形狀

vec2 vertices[NumPoints] = { 
    vec2(-1, -0.75), vec2(-0.75, -0.25), vec2(-0.5, -0.75), //Triangle 
    vec2(0, -0.25), vec2(0.5, -0.25), vec2(0.5, -0.75), vec2(0, -0.75), //Quad 
    vec2(0.25, 0.25), vec2(0.5, 0.5), vec2(0.75, 0.25), vec2(0.65, 0), vec2(0.35, 0) // pentagon 
}; 

爲了簡潔起見,我將省略大部分樣板代碼。在我的顯示功能,我有以下代碼:

glDrawArrays(GL_TRIANGLES, 0, 3); // draw the points 
glDrawArrays(GL_TRIANGLE_FAN, 3, 4); //quad 
glDrawArrays(GL_TRIANGLE_FAN, 7, 5); //polygon 

一切工作正常,沒有任何問題。但是,如果您需要確切知道您需要多少頂點,那麼創建複雜場景似乎相當乏味且幾乎不可能。我在這裏錯過了什麼嗎?另外,如果需要創建一個圓,我將如何使用GL_TRIANGLES來做到這一點?

回答

1

在實際應用中,你將有現場管理,與場景和多個子對象爲每個對象的多個對象。對象負責生成頂點數據和相應的繪圖調用並適當地調度它們。

例如,您可以擁有一個具有單個屬性的立方體對象 - 邊長。從該單一屬性中,您生成呈現立方體所需的全套頂點。

您還可以選擇將立方體基元轉換爲另一個兼容對象,例如,您有3個屬性(高度,寬度和深度)的盒基元,或者甚至是由面組成的任意多邊形網格由頂點組成的邊。

這是按照這樣的順序不同場景中的對象進行排序,以便最大限度地減少繪製調用的數量,這是典型的瓶頸,3D圖形與鬥爭是一個好主意。結合實例化和自適應LOD,您可以獲得顯着的性能改進。

對於圓形 - 原始模式,最有效的繪製方法是使用三角形風扇。但是,如果將圓形圖元轉換爲多邊形網格,則可以呈現正三角形。繪製圓圈所需的頂點數量將增加。隨着三角形的球迷,你需要爲第一個三角形3個頂點,然後只1每增加部分額外頂,用等邊三角形,你將需要完整的3個頂點爲圓的每一個角落。

1

我在這裏錯過了什麼嗎?

是的。您可以動態分配內存並從文件讀取數據。這就是任何真實世界的計劃如何處理這種事情。您將擁有一些場景管理結構,允許從文件加載場景和對象。文件本身將包含一些元數據,如可用於在運行時準備數據結構的面數,頂點等。