现在的位置: 首页 > 综合 > 正文

3D基本概念答疑(1)

2013年12月03日 ⁄ 综合 ⁄ 共 490字 ⁄ 字号 评论关闭

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

答:一个主要原因是行向量和列向量的区别。
对于变换矩阵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值的范围设定不同,那么矩阵也会不同。

抱歉!评论已关闭.