3D基本概念答疑(1)

问:为什么在一些书上和文章上看到的变换矩阵以及相乘顺序不一样?

答:一个主要原因是行向量和列向量的区别。
对于变换矩阵M,如果v是行向量,这时使用v左乘 矩阵:
v'=vM (v是行向量)
如果v是列向量,就要使用v右乘矩阵:
v'=Mv (v是列向量)
由于向量矩阵之间的乘法(实际也就是矩阵乘法)是不满足交换率的,所以对于行向量和列向量 ,他们做相同变换的变换矩阵是不一样的,所以在一些书上看到的变换矩阵和另外一些书上不 一样。

当用连续多个矩阵变换向量时,对于行向量: v'=vM1M2M3
对于列向量: v'=M3M2M1v
所以当要连接变换矩阵时,相乘顺序不一样,分别是M'=M1M2M3和M'=M3M2M1

DirectX使用行向量,而OpenGL使用列向量;线性代数中使用列向量。在书写时为了方便,常用行向量的转置表示列向量,如[1,2,3]T表示一个列向量。这两种方式没有什么优劣之分,只是要注意对于某本书,某篇文章,某套API,某个引擎,要弄清楚他使用的是行向量还是列向量 。

矩阵不一样可能还有其他原因,比如将顶点变换到摄像机的齐次剪裁空间时,如果远近剪裁平面z值的范围设定不同,那么矩阵也会不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值