-
為何學習
為了更好地理解計算機圖形學相關基礎知識,更好地理解3D引擎的底層工作原理,從而更好地進行移動領域的3D應用開發。
需要說明的是:不需學習OpenGL-ES,也可以基於3D引擎進行3D應用開發。
-
什么是OpenGL-ES
OpenGL-ES是平台無關的廣泛應用於移動設備的2D/3D圖形API(除了微軟系的智能手機一般都支持該API),抽象層次較低,一般作為3D引擎的渲染底層,較少直接用於應用開發。OpenGL-ES是OpenGL的一個分支版本,針對嵌入式系統做了精簡,一方面便於支持相對簡單的嵌入式設備,另一方面可以較少地承擔OpenGL歷史包袱之累。
-
版本
目前有三個版本:
a, 1.0 & 1.1
固定渲染管線,基於OpenGL 1.5精簡,在可編程管線大行其道的今天,已顯過時,不建議花費過多時間進行學習。GPU廣泛支持。1.1完全兼容1.0. Android SDK支持。
b, 2.0
可編程渲染管線,基於OpenGL2.0精簡,非統一架構,包含頂點shader和片元shader,不兼容1.X,目前幾乎所有新出貨的智能手機GPU都支持,屬於目前的主流版本。Android SDK支持。
c, 3.0
最新版本api,2012年秋發布,可編程渲染管線,已有少量GPU支持。
-
如何學習
對完全沒有基礎的同學,建議按如下順序進行:
1,了解3D圖形處理的大體流程,即輸入的各種數據(頂點、紋理等)是如何轉變為屏幕上的圖形的。這其中經過了哪些階段,各個階段大體上做了什么,有個總體的概念。
2,學習3D數學,至少需要理解這些基礎之后再學習API:點和向量在坐標系(標架)中的表示、向量運算及其幾何表示、點和向量的關系、矩陣運算、矩陣變換的原理和推導、齊次坐標。
3,學習OpenGL-ES API,學習某個開源的3D引擎,學習高抽象層次上的3D世界表述。嘗試自己實現一些模塊,特別是數學方面。
4,重復2和3,它們是相互促進的。
5,開發完整的應用,應該包含OpenGL ES的所有基本特性。
建議:數學基礎非常重要,這是支撐的基礎;總體觀感(隱喻)非常重要,這是系統的全局拼圖,讓你更容易理解特定概念。
- 建議的學習資料
A,官網
http://www.khronos.org/opengles/
其文檔主要分為幾類:
specification: 標准(規格)說明書,描述了所有細節。
Online Reference Pages: 在線API文檔,說明了所有API的用法。
Quick Reference Card: 快速參考卡,以圖片的形式展現了總體框架。
對2.0和3.0還有GLESSL(GLES着色語言)的參考文檔。
B, 數學
《3D數學基礎:圖形與游戲開發》:對初學者來說很棒的一本書,相對易於理解,不足之處在於從數學角度來說不夠嚴謹和徹底,依然會有知其然而不知其所以然的地方。
《交互式計算機圖形學 - 基於OpenGL的自頂向下方法》(第六版):計算機圖形學入門導論,對前者是很好的數學和圖形學基礎方面的補充,對學習OpenGL也有足夠的價值,第六版較新,算是國內少有的中文版的現代的圖形學教程。不足之處在於其假設讀者有了一定的線性代數、解析幾何、微積分方面的知識,但總體來說也比較適合初學者。
C,API
我所了解的ES相關的書只有兩本:《OpenGL ES 2.0 Programming Guide》和國人的《Android 3D 游戲開發技術寶典 - OpenGL ES 2.0》。
由於OpenGL和OpenGL ES的關系,也可以參考OpenGL的系列教材,包括紅寶書、橙寶書、藍寶書。
《3D游戲編程大師技巧》自己實現了一個軟渲染引擎,雖然有些老,也值得一看,對數學和基礎概念會有幫助。
建議結合官網文檔進行閱讀。
D,引擎
OGRE: C++寫的開源3D渲染引擎,質量、資料、社區都比較完備。
JMONKEY 3: Java寫的開源3D游戲引擎,支持ANDROID,資料、社區比較完備。
Unity3D: 商業引擎,非開源,上手容易,平台支持廣泛,基於組件的現代設計思想值得參考。
E,社區
http://www.altdevblogaday.com/: 高質量的游戲開發博客集中地。
http://www.gamedev.net: 游戲開發的老牌名站。
http://www.opengpu.org/forum.php: 知名國內計算機圖形學站點。
F, 更多書籍推薦
http://www.realtimerendering.com/books.html
- 相關工具
a,模擬器:
b,shader編輯器
PowerVR SDK。
ARM的作為Eclipse 插件提供的Mali GUP Shader Development Studio(http://malideveloper.arm.com/develop-for-mali/tools/mali-gpu-shader-development-studio/)
都提供了離線編譯、語法高亮、錯誤提示、實時效果展示功能,后者很適合用於Android開發。