第0节:
为何学习
为了更好地理解计算机图形学相关基础知识,更好地理解3D引擎的底层工作原理,从而更好地进行移动领域的3D应用开发。
需要说明的是:不需学习OpenGL-ES,也可以基于3D引擎进行3D应用开发。
什么是OpenGL-ES
OpenGL-ES是平台无关的广泛应用于移动设备的2D/3D图形API(除了微软系的智能手机一般都支持该API),抽象层次较低,一般作为3D引擎的渲染底层,较少直接用于应用开发。OpenGL-ES是OpenGL的一个分支版本,针对嵌入式系统做了精简,一方面便于支持相对简单的嵌入式设备,另一方面可以较少地承担OpenGL历史包袱之累。
版本
目前有三个版本:
a,1.01.1
固定渲染管线,基于OpenGL1.5精简,在可编程管线大行其道的今天,已显过时,不建议花费过多时间进行学习。GPU广泛支持。1.1完全兼容1.0.AndroidSDK支持。
b,2.0
可编程渲染管线,基于OpenGL2.0精简,非统一架构,包含顶点shader和片元shader,不兼容1.X,目前几乎所有新出货的智能手机GPU都支持,属于目前的主流版本。AndroidSDK支持。
c,3.0
最新版本api,年秋发布,可编程渲染管线,已有少量GPU支持。
如何学习
对完全没有基础的同学,建议按如下顺序进行:
1,了解3D图形处理的大体流程,即输入的各种数据(顶点、纹理等)是如何转变为屏幕上的图形的。这其中经过了哪些阶段,各个阶段大体上做了什么,有个总体的概念。
2,学习3D数学,至少需要理解这些基础之后再学习API:点和向量在坐标系(标架)中的表示、向量运算及其几何表示、点和向量的关系、矩阵运算、矩阵变换的原理和推导、齐次坐标。
3,学习OpenGL-ESAPI,学习某个开源的3D引擎,学习高抽象层次上的3D世界表述。尝试自己实现一些模块,特别是数学方面。
4,重复2和3,它们是相互促进的。
5,开发完整的应用,应该包含OpenGLES的所有基本特性。
建议:数学基础非常重要,这是支撑的基础;总体观感(隐喻)非常重要,这是系统的全局拼图,让你更容易理解特定概念。
建议的学习资料
A, 1,0,0,0
[1,2,3,1]X0,1,0,0=[5,7,9,1]
0,0,1,0
4,5,6,1
[1,2,3,1]称之为点[1,2,3]的齐次坐标表示,其中第四个分量一般称为w分量,对3D来说,齐次坐标只是一种数学技巧,用来将各种变换统一为一种矩阵表示(3X3矩阵无法表示仿射变换,平移变换属于仿射变换),齐次坐标可参考之前文章中推荐的书籍(学习OpenGL-ES:0-方法和资料),此处不再赘述。
观察上述矩阵,发现第四行为[4,5,6,1],恰为平移向量V的齐次坐标表示,因此沿向量V[X,Y,Z]平移的平移变换矩阵可构造如下;
1,0,0,0
0,1,0,0
0,0,1,0
X,Y,Z,1
9,总结:对3D世界中的物体进行平移,就是对其所有顶点P进行相同的平移,这个平移可以通过一个平移向量V[X,Y,Z]描述,也可以通过一个平移变换矩阵M描述,平移变换的结果P1=P+V=PXM。M是如下形式的4X4矩阵:
1,0,0,0
0,1,0,0
0,0,1,0
X,Y,Z,1