OpenGL ES之向量、矩阵
OpenGL ES是一个很强大的库,可以绘制各种酷炫的3D图形,既然涉及到3D图形,那么跟3D数学肯定是脱离不了关系的,在我们正式进行OpenGL ES之前,我们需要先搞清楚一些数学上的东西,这样在你后面进一步学习OpenGL ES的时候才不至于懵逼。主要涉及到的一些数学概念有:
- 向量
- 向量的定义
- 向量的加法、减法
- 向量的乘法(数乘、点乘、叉乘)
- 矩阵
- 矩阵的定义
- 矩阵的乘法(数乘、乘法、向量和矩阵的乘法)
- 一些常见的矩阵变换:缩放、投影、平移等(含4维齐次坐标的使用)
向量
向量的定义
定义:数学上区分向量(矢量)和标量(数量),标量就是我们平常所用的数字,强调数量值;向量的话其实就是带有方向的标量,常用有向线段表示。向量根据所在的坐标系(平面坐标、3D坐标、4D坐标等),分为2维坐标、3维坐标等,依次类推
向量的大小就是向量的长度(模),长度非负。计算方式为向量各分量的平方之和开平方,比如二维向量
向量的方向描述了空间中向量的指向。箭头是向量的末端(向量“结束”于此),箭尾是向量的“开始”
日常生活中很多量都有大小和方向,比如:位移(向前三步,由大小三步和方向向前构成)、速度(我们以50公里每小时的速度向北行驶,由大小50公里每小时和方向北构成),注意位移和速度与距离、速率是完全不同的,前两者为向量,后两者为标量。
一些常用的向量类型:
类型名 | 定义 |
---|---|
法向量 | 垂直于平面的直线所表示的向量为该平面的法向量。由于空间内有无数个直线垂直于已知平面,因此一个平面都存在无数个法向量 |
标准化向量(法线) | 向量大小为1的向量称为单位向量,单位向量经常也被称作标准化向量或更简单地秤为法线。对于任意非零向量v,都能计算出一个和v方向相同的单位向量,这个过程被称作向量的“标准化”,要标准化向量,将向量除以它的大小(模)即可。(零向量不能标准化) |
OpenGL ES在求光照的时候会用到法向量和标准化向量,具体的我们在涉及到光照的知识的地方会说明。
向量的加法和减法
向量加法的运算法则:两个向量相加,将对应的分量相加即可(前提条件:两个向量的维数相同&