2014-05-01 64 views
0

在處理過程中,只需按特定順序給出頂點位置即可輕鬆創建3D形狀。最佳3D頂點圖案OpenGL

例如,對於簡單的方形:

beginShape();// QUAD would work as parameter 
vertex(10,10); 
vertex(20,10); 
vertex(20,20); 
vertex(10,20); 
endShape(); 

我想知道是,如果我想創建形成一個更大的方塊(即一些四邊形份額角落),我應該創建較小的四邊形多個四邊形自己創建重疊的頂點,還是有辦法定義我可以用於多個四邊形的頂點,而無需在同一位置創建新的頂點?

實施例:

X:1, 2 
+---+---+ Y: 
| | | 
| | | 1, 
+---o---/ 
| | | 
| | | 2 
+---+---+ 

所有四邊形之間共享的中間角(標記爲「O」)將具有4個頂點從所有相鄰四邊形重疊。 (2,1)和(2,2)

最右邊的中間頂點(標記爲'/')將有兩個頂點重疊,當涉及到vertexcount時,這不是非常低效嗎?

這可能是OpenGL的工作方式,但在我看來,這看起來效率不高,如果我錯了,請告訴我。

回答

2

你描述的是在OpenGL 1.0中繪製頂點的原始方法。自從1997年發佈OpenGL 1.1規範以來,已經有了更高效的方法。查看API調用,如glDrawElements,它允許您使用頂點索引。

+0

我可能會看看,但因爲我正在使用處理,我想使用內置的頂點和beginShape函數。這雖然看起來像是一個簡單的單線程來繪製整個形狀而不使用PShape,但這是否意味着性能更差,因爲該對象沒有像PShape一樣加載到內存中? –

0

你想要什麼被稱爲Quad Strip基元。

您以特殊順序提供頂點,它將重新使用構成相鄰四邊形的4個頂點中的2個頂點。條帶中頂點的正確順序是這樣的,每個奇數基元反向纏繞。如果要使用四邊形條繪製未連接的四邊形,則必須執行稱爲「原始重啓」的操作。

當然四邊形在現代OpenGL中已被棄用;三角形支持非常相同的概念。實際上,一個單獨的非剝離四邊形與填充相同區域的三角形條具有相同的頂點順序。

您還可以使用索引繪圖,其中您通過ID引用每個基元的頂點。這需要額外存儲一系列索引,但它還具有額外的好處,即允許您在不是一系列連接的基元的網格中重新使用頂點。

+0

如果爲每個頂點製作一個3D矢量陣列可以解決我的問題,那麼我肯定會嘗試一下。正如你所說,QUADs和QUAD_STRIPs已被棄用,我想繼續支持/現代功能。 –