生成Model矩阵

在OpenGL中3D绘图的关键是三个矩阵Model,View,Projection;暂且不管后两个,因为是在相机中计算的,那么现在关键就是这个Model矩阵。

这个矩阵掌管着一个3D模型的缩放,旋转,平移。

ModelMatrix = TranslateMatrix * RotationMatrix * ScaleMatrix;顺序不能错!

这样一个Model矩阵通过三个矩阵相乘获得,通过名字可以看出,这三个矩阵分别是平移,旋转和缩放的矩阵,也就是说得到这三个矩阵就可以生成一个Model矩阵,再配合相机计算出的另外两个矩阵就可以实现3D绘图了。也就是通常GLSL要我们提供的那三个矩阵参数。

首先看TranslateMatrix:

T =    \begin{bmatrix} 1 & 0& 0&Tx\\ 0 & 1 &0 &Ty\\ 0 & 0& 1& Tz\\ 0 & 0 & 0&1 \end{bmatrix} ,不用说Tx,Ty,Tz就是代表了模型在各个轴上的位移。

S = \begin{bmatrix} Sx& 0 &0 &0 \\ 0 & Sy & 0& 0\\ 0 & 0 & Sz&0 \\ 0&0 & 0 & 1 \end{bmatrix},这个也很简单Sx,Sy,Sz就是模型在各个轴上的缩放。

最后是旋转矩阵了,这里通过Quaternion四元数生成:

如果有四元数:Q = \begin{bmatrix} w\\ x\\ y\\ z \end{bmatrix} ,(在Qt库的QQuaternion中w分量的名字是scalar)

那么可以推出旋转矩阵R = \begin{bmatrix} 1-2y^{2}-2z^{2} &2xy-2zw &2xz+2yw &0 \\ 2xy+2zw&1-2x^{2}-2z^{2} &2yz-2xw &0 \\ 2xz-2yw& 2yz+2xw & 1-2x^{2}-2y^{2} &0 \\ 0 & 0 &0 &1 \end{bmatrix}

可以通过轴-角旋转推导出四元数旋转:

如果有轴-角为 \begin{bmatrix} x\\ y\\ z\\ \theta \\ \end{bmatrix} :绕轴(x,y,z)转theta角。

可以推导出对应的四元数为 \begin{bmatrix} cos\frac{\theta }{2} \\ xsin\frac{\theta }{2} \\ ysin\frac{\theta }{2} \\ zsin\frac{\theta }{2} \\ \end{bmatrix}

由此也可推出从轴-角直接生成旋转矩阵为 \begin{bmatrix} tx^{^{2}}+c & txy+sz &txz-sy &0\\ txy-sz & ty^{2}+c &tyz+sx&0 \\ txz+sy&tyz-sx & tz^{2}+x&0\\ 0&0&0&1 \end{bmatrix} 其中s=sin(theta),c=cos(theta),t=1-cos(theta)

上面公式来自《游戏物理引擎开发》

有了这些公式基本就可以计算出Model矩阵了

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值