1. 程式人生 > >OpenGL ES幾何圖形的繪製順序

OpenGL ES幾何圖形的繪製順序

      不知道你在使用glDrawArrays繪製多個幾何圖形的時候有沒有注意到它們的繪製順序.如你在程式碼中依次使用glDrawArrays繪製瞭如下幾個幾何圖形:

(1)繪製一個三角形

(2)繪製一個四邊形

(3)繪製一個五角形

      那麼實際上OpenGL ES在繪製幾何圖形的時候的順序和你程式執行的順序是相反的,即實際的繪製順序是:

(3)繪製一個五角形

(2)繪製一個四邊形

(1)繪製一個三角形

      這是為什麼呢?你可能也發現了當你設定好了所有的頂點資料,並呼叫了glDrawArrays,但如果你不接著呼叫[context presentRenderbuffer:GL_RENDERBUFFER_OES];螢幕上依然沒有任何輸出。

      [context presentRenderbuffer:GL_RENDERBUFFER_OES];

的作用是展示渲染緩衝區,也就是說,你之前呼叫glDrawArrays繪製的頂點資料實際上先放在了渲染緩衝區中,當你執行了這行程式碼時才從渲染緩衝區中將頂點資料取出並繪製。從幾何圖形的繪製順序可以發現,實際上渲染緩衝區的資料結構是一個棧結構。棧是一種先進後出的資料結構,即壓入資料時依次將放進的資料放在棧頂位置,而取出資料的時候依次將棧頂的資料彈出。

      程式碼中執行繪製的順序和資料壓棧的方式如下:

(1)繪製一個三角形

三角形

(2)繪製一個四邊形

四邊形
三角形

(3)繪製一個五角形

五角形
四邊形
三角形

       所以才會在最終展示渲染緩衝區的時候出現和程式碼的執行順序相反的問題。