学习OpenGL-ES: 0 - 方法和资料
-
为何学习
为了更好地理解计算机图形学相关基础知识,更好地理解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开发。