行列主序矩阵

因为之前接触的是虚幻,用的是DX,所以接触的是行矩阵。最近一年接触自研引擎,用的是OpenGL的列矩阵。然而我之前图形基础没打好,以至于很长一段时间没弄清楚涉及到矩阵相关的一些问题。所以乘着自己意识清醒,还是应该梳理一下。

1、什么是行主序和列主序

2、什么时候向量是前乘什么时候是后乘

3、构造旋转位移缩放矩阵时,矩阵乘法应该按照什么样顺序

 

主序

r11 r12 r13 0
r21 r22 r23 0
r31 r32 r33 0
tx  ty  tz  1

其实记住行主序只要记住矩阵中,表示平移的3个分量是在一行就是行主序。行主序需要用向量去前乘来完成变化,即Vector4*Mat。一般为了节省矩阵存储的内存开销,我们只存储左边4*3的部分,默认最后一列是0 0 0 1

主序

r11 r21 r31 tx
r12 r22 r32 ty
r13 r23 r33 tz
0   0   0   1

列主序其实就是将行主序的内容直接进行转置,这样平移的3个分量就是在一列了,就是列矩阵。列主序需要用向量去后乘来完成变化,即Mat*Vector4。一般为了节省矩阵存储的内存开销,我们只存储上边3*4的部分,默认最后一行是0 0 0 1

GLSL矩阵构造

CPU传给GPU的顺序 M00、M01、M02、M03...

GLSL中接收并构造的顺序
M00    M10    M20    M30
M01    M11    M21    M31
M02    M12    M22    M32
M03    M13    M23    M33

下面的m03对应上面M03的位置,很容易误写成Mat[3][0]来取值,实际应该是如下写法
float m03 = Mat[0][3];

https://cloud.tencent.com/developer/article/1504864 GLSL矩阵语法

构造矩阵时的乘法顺序

无论是行矩阵还是列矩阵在做乘法的时候,都是当前状态的矩阵前乘以另一个矩阵。例如我先平移再旋转,就是RT

因为矩阵乘法是不满足交换律,也就意味着矩阵相乘时需要按指定顺序才能达到我们的目的。当我们有旋转位移缩放信息想构造矩阵时,我们可以按照RST或者SRT的方式去构造,意味着先旋转再缩放和先缩放再旋转的结果是一样的。而先旋转再平移和先平移再旋转结果是不一样的,因为旋转过后坐标系就变了,就会按照旋转过后的坐标系去平移。所以我们都是先移动再旋转缩放,或者先移动再缩放旋转。但是矩阵相乘的时候是反方向也就是T再后面,所以这也是经常会搞混的点。对于这部分详细的解释可以参考这篇博客,我觉的写的就挺清晰

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值