在OpenGL中3D绘图的关键是三个矩阵Model,View,Projection;暂且不管后两个,因为是在相机中计算的,那么现在关键就是这个Model矩阵。
这个矩阵掌管着一个3D模型的缩放,旋转,平移。
ModelMatrix = TranslateMatrix * RotationMatrix * ScaleMatrix;顺序不能错!
这样一个Model矩阵通过三个矩阵相乘获得,通过名字可以看出,这三个矩阵分别是平移,旋转和缩放的矩阵,也就是说得到这三个矩阵就可以生成一个Model矩阵,再配合相机计算出的另外两个矩阵就可以实现3D绘图了。也就是通常GLSL要我们提供的那三个矩阵参数。
首先看TranslateMatrix:
T = ,不用说Tx,Ty,Tz就是代表了模型在各个轴上的位移。
S = ,这个也很简单Sx,Sy,Sz就是模型在各个轴上的缩放。
最后是旋转矩阵了,这里通过Quaternion四元数生成:
如果有四元数:Q = ,(在Qt库的QQuaternion中w分量的名字是scalar)
那么可以推出旋转矩阵R =
可以通过轴-角旋转推导出四元数旋转:
如果有轴-角为 :绕轴(x,y,z)转theta角。
可以推导出对应的四元数为
由此也可推出从轴-角直接生成旋转矩阵为 其中s=sin(theta),c=cos(theta),t=1-cos(theta)
上面公式来自《游戏物理引擎开发》
有了这些公式基本就可以计算出Model矩阵了