一些关于矩阵的理解

因为长时间不使用矩阵,会经常对一些概念有混淆,现记录如下,大量自己的不专业理解:

1. 矩阵元素在内存中存储顺序不受影响的原因。

DX采用的是行优先,OPENGL采用的是列优先,但是矩阵元素在内存中的存储位置确是(巧合的)一致,这是因为矩阵乘法的特性导致的。

首先对于一个齐次坐标(x, y, z, 1)来说,

DX是行优先,所以它是一个1行4列的矩阵,记为1 x 4

OPENGL是列优先,所以他是一个4行一列的矩阵,记为4 x 1

我们的变换矩阵是4 x 4的,因为矩阵的乘法规则,所以

DX中,变换乘法,必须将4 x 4的矩阵后置,这样才是合法的乘法规则 1 x 4 * 4 x 4.

OPENGL中,必须将4 x 4的矩阵前置,这样才是合法的乘法规则 4 x 4 * 4 x 1.

这也是两个标准下,乘法顺序的根本原因。

因为矩阵乘法是用左边矩阵的行乘以右边矩阵的列

而DX的矩阵排列为

0  1  2  3 

4  5  6  7

8  9  10 11

12 13 14 15

所以优先参与运算的是 0 4 8 12 这一列(DX中,矩阵在后面,所以是列先参与)


Opengl的矩阵排列为

0  4  8  12

1  5  9  13

2  6  10 14

3  7  11 15

所以优先参与运算的是 0 4 8 12 这一行(OPENGL中,矩阵在前面,所以行先参与)


由于结果都是一样的,所以,内存中的存储顺序是一致的。可以理解为,由于矩阵在乘法中的位置相反,恰好抵消了矩阵转置带来的影响。


2. 矩阵乘法的几何意义

百度上大部分答案就是代表一次变换。

我想从坐标系变换的角度来解释。

局部坐标转世界坐标,就用局部坐标乘以所在矩阵(既然是局部坐标,必然存在一个所在的矩阵)。

世界坐标转局部坐标,就用世界坐标乘以矩阵的逆。

点乘以一个矩阵,得到的是,将这个点所在的坐标系,变换成矩阵的样子以后,这个点的新世界坐标。并且老世界坐标和老世界矩阵的对应关系 与 新世界坐标和当前矩阵的相对关系,是一样的。这也是所谓的一次变换。其实只是坐标系的直接变化。


3. 视图矩阵的含义

视图矩阵的定义应该是:任何一个点乘以视图矩阵以后,会得到视空间的坐标,也就是某一个矩阵下的局部坐标。

根据之前提到的,世界坐标转局部坐标规则,其实视图矩阵是相机所在矩阵的逆矩阵。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值