2013-03-14 74 views
0

我還是OpenGL ES 2.0的新手,已經開始理解轉換矩陣的操作。雖然在繪製原始圖時我對z順序的相關性有點不清楚。例如,當我使用透視投影矩陣並用它來變換四邊形的頂點時,它確實將四邊形繪製得更小(以便它看起來更遠)。然而,當我以更大的z階先畫一個四邊形並且以較小的z階畫第二個四邊形時,第二個四邊形仍然出現在第一個四邊形的前面。這是預期的ES 2.0還是我需要啓用其他東西?是否有必要按z順序排列四邊形,或者通過啓用設置來解決這個問題?我可以在OpenGL ES 2.0中控制繪製圖元的z順序嗎?

例如,繪製第一個四邊形(0,0.5,0),第二個繪製(0,0.5,-2.0)。第二個由於透視變換而顯得較小,但在第一個之前。兩個四邊形都有相同的頂點。也許我還應該提到,在繪製這些四邊形時,我不是在一次調用glDrawElements()時做的,我在一個循環中調用glDrawElements(),例如,繪製列表的每個模型。

回答

1

除非您基本上在做2D應用程序,否則您不想手動排序原始圖元,您將需要使用depth bufferz緩衝區)。關於該主題的OpenGL ES 1.1 turial是here,這個東西在ES 2.0中沒有任何不同。

請確保谷歌的幫助獲得特定平臺上的深度緩衝區設置,iOS/Android/GLUT /等顏色/深度緩衝區設置是不同的。

+0

謝謝,我發現了一些在我的平臺上初始化的信息。但是關於二維動畫,如果我要按z順序手動排序我的基元,我首先必須使用我爲基元生成的mvp矩陣進行轉換。這很好,但是我只是在做與頂點着色器相同的工作。所以我想我很想知道爲什麼要這樣做?不啓用深度緩衝區的收益是否超過了每幀額外工作的成本? – 2013-03-14 20:37:22