轉載自http://tonmly.blog.163.com/blog/static/17471285620116272197507/
你需要明白OpenGL如何繪製並決定我們看到的東西。
相對於OpenGL來說OpenGL ES一個很大的缺點就是除了三角形以外沒有別的圖元類型。我們沒有其它多邊形,所以我們想要創建的所有的對象都必須由三角形構成。我引用一個blog的帖子來說明這個問題: IPhone developer ,同時也推薦他的這些文章 OpenGL ES series.
這裏有更多的關於三角形的東西你需要知道。在OpenGL中,有一個概念叫做彎曲(winding),意思是vertices繪製時的順序。與現實世界中的對象不同,OpenGL中的多邊形一般沒有兩個面。他們只有一個面,一般是正面,一個三角形只有當其正面面對觀察者的時候纔可以被看到。可以配置OpenGL將一個多邊形作爲兩面的,但是默認情況下三角形只有一個可見的面。知道了那邊是多邊形的正面以後,OpenGL就可以少做一半的計算量。如果設置兩面都可視,則需要多的計算。
雖然有時候一個多邊形會獨立地顯示,但是你或許不是非常需要它的背面顯示,經常一個三角形是一個更大的對象的一部分,多邊形的一面將在這個物體的內部,所以永遠也不會被看到。這個沒有被顯示的一面被稱作背面,OpenGl通過繪製的順序來確定那個面是正面哪個是背面。頂點按照逆時針繪製的是正面(默認是這樣,但是可以被改變)。因爲OpenGL能很容易地確定哪些三角形對用戶是可視的,它就可以通過使用Backface Culling來避免爲那些不顯示在前面的多邊形做無用功。
在上面的示意圖中,左邊青綠色的的三角形是背面,將不會被繪製,因爲它相對於觀察者來說是順時針的。而在右邊的這個三角形是正面,將會被繪製,因爲繪製頂點的順序相對於觀察者來說是逆時針的。
GL_TRIANGLES
- 這個參數意味着OpenGL 使用三個頂點來組成圖形
所以,在開始的三個頂點,將用頂點1,頂點2,頂點3來組成一個三角形。完成後,在用下一組的三個頂點來組成三角形,直到數組結束。
GL_TRIANGLE_STRIP
- OpenGL 的使用將最開始的兩個頂點出發,然後遍歷每個頂點,這些頂點將使用前2個頂點一起組成一個三角形。
GL_TRIANGLE_FAN
- 在跳過開始的2個頂點,然後遍歷每個頂點,讓OpenGL 將這些頂點於它們前一個,以及數組的第一個頂點一起組成一個三角形。
也就是說,同樣是0,1,2,3這4個頂點。
在STRIP 狀態下是,0,1,2;1,2,3這2個三角形。
在FAN 狀態下是,2,1,0;3,2,0這2個三角形。
glLoadIdentity() 只是一個覆蓋(重置)函數,它只是基本重置所有的條件(重置所有狀態)。
着色
如何通知矩形繪製從一個顏色到下一個?OpenGL 使用了着色。這裏有兩個着色模型可以在
OpenGL 使用:GL_FLAT&GL_SMOOTH。GL_SMOOTH 是默認的渲染。
做一個總結:GL_SMOOTH 是一個平滑着色,這就意味着當你開始填充一個矩形的時候,O
penGL 將使用在我們squareColours[] 數組裏的默認顏色去定義在squareVertices[] 數組裏
的每個頂點。使用插值中每個像素的面積之間的點,順利改變顏色之間的四點。換句話說,
這將是我們出現彩色的矩形。
GL_FLAT 是使用物體的的最後一個頂點的顏色去填充整個圖元。形