2012-05-11 81 views
4

一些背景:OpenGL ES和與VBO重疊的三角形

我對OGL很新穎。我的應用程序僅關注2D。所有物體都與觀察方向垂直,我使用正交投影。我發現系統的性能受限於繪製*電話的數量,這表明我需要批量處理更多。

我只需繪製一個對象,但它包含數千個可能重疊的三角形。我有能力在我的特定應用程序中預先計算幾何圖形,並將三角形排列在前面,因爲它們具有不同程度的透明度。頂點屬性由僅包含片段程序中使用的alpha的顏色組成。

我做了什麼:

所有原語是三角形和我分配每個三角形的三個頂點相同的顏色,因爲顏色是整個臉不變。我把所有三角形的頂點和它們的顏色放到一個單一的VBO中(16位;沒有那麼多頂點)。索引緩衝區將三角形排在前面,我發出一個繪製調用。我使用alpha混合(SRC_ALPHA,ONE_MINUS_SRC_ALPHA)。

結果:

我看到的結果被正確地混合並呈現我具有唯一的機器上和測試上。我沒有嘗試過別人。我已經搜索了相當長的一段時間,但徒勞無功,尋求一些明確的答案。順便說一下,唯一的參考是VBO擴展規範中提到的「基元序列」,但它沒有解決基元重疊時發生的情況。

問題:

這是保證的行爲嗎?這就是說,結果將與在立即模式下的glBegin(...)和glEnd(...)內發出多個調用(這是標準保證的)相同嗎?

注意:深度緩衝區和模板緩衝區被關閉。

+0

澄清,即使三角形是正常的觀看方向,所有頂點確實有一個深度,如果有所作爲 –

+1

+1而你說你是*「對OGL很新」*你似乎已經擁有對於很多基本原則的理解比一般ES初學者在這裏提出的要求更加紮實。 –

+2

這不是VBO擴展的問題,而只是它構建的頂點數組接口。在OpenGL 2.0規範中,它解釋了'glDrawArrays'和類似的調用,*就像一個單獨的'glBegin/glEnd'塊一樣,所以可以推斷出相同的限制。但是,它會因爲單個'glBegin/glEnd'塊中的原語按順序呈現(或實際上按順序到達幀緩衝區)而得到間隔? –

回答

3

由OpenGL規範保證原語將按照提供的順序呈現。從glDraw*命令中提取的每個基元都將按其組件頂點指定的順序進行渲染。

所以是的:如果你把三角形放在一個順序中,這就是你渲染它們的順序。