视图变换

从大局上考虑,在应用任何其他模型变换之前,必须先应用视图变换。-- 《OpenGL 超级宝典 第5版》

视图变换是应用到场景中的第一种变换,通过物体/观察者在Z轴上的移动,确定场景中利于观察的位置。

默认情况下,透视投影中的观察者位置处于原点(0,0,0),并沿着z轴负方向看向屏幕里面,一般通过moveForward方法来调整观察者位置,moveForward默认的朝向是-z轴,所以向屏幕里面移动传正数值,向屏幕外即+z轴,需要传负数值。

模型变换

模型变换不无外乎就是平移、旋转和缩放。在iOS核心动画中的仿射变换中的底层实现就是模型变换。

平移(m3dTranslationMatrix44)

物体沿着3D笛卡尔坐标系的某个坐标轴移动。
OpenGL之视图变换与模型变换

void m3dTranslationMatrix44(M3DMatrix44f m, floata x, float y, float z);
参数:
参数1:结果矩阵,平移之后的结果矩阵
参数2:沿着X轴移动多少,正数\负数
参数3:沿着Y轴移动多少,正数\负数
参数4:沿着Z轴移动多少,正数\负数

旋转(m3dRotationMatrix44)

对象围绕着一条坐标轴进行旋转
OpenGL之视图变换与模型变换
m3dRotationMatrix44(M3DMatrix44f m, float angle, float x, float y, float z);
参数1:结果矩阵,旋转之后的结果矩阵
参数2:旋转多少弧度
参数3:是否围绕X轴旋转,是(1),不是(0)
参数4:是否围绕Y轴旋转,是(1),不是(0)
参数5:是否围绕Z轴旋转,是(1),不是(0)

缩放(m3dScaleMatrix44)

对象的大小进行了指定数量的放大或缩小。缩放可以是不均匀的,即不同维度可以进行不同程度的缩放。
OpenGL之视图变换与模型变换
void m3dScaleMatrix44(M3DMatrix44f m, float xScale, float yScale, float zScale)
参数1:结果矩阵
参数2:围绕X轴放大\缩小;放大x>1,缩小:0.5f
参数3:围绕Y轴放大\缩小;放大x>1,缩小:0.5f
参数4:围绕Z轴放大\缩小;放大x>1,缩小:0.5f

综合变换(m3dMatrixMultiply44)

void m3dMatrixMultiply44(M3DMatrix44f product, const M3DMatrix44f a, const M3DMatrix44f b);
参数1:结果矩阵
参数2:先变换的矩阵
参数3:后变换的矩阵

相关文章: