Math 图形编程中的矩阵乘法顺序PVM与MVP

Math 图形编程中的矩阵乘法顺序PVM与MVP,math,matrix,3d,Math,Matrix,3d,大家好,我想知道为什么大多数教程和编程代码都使用MVP来描述模型视图投影矩阵。而不是PVM,这是代码中的实际实现顺序: mat4 MVP = ProjectionMatrix * ViewMatrix * ModelMatrix; gl_Position = MVP * VertexInModelSpace; 对我来说,写PVM而不是MVP似乎更容易理解。矩阵实际上没有固定的含义,只是行和列之间的关系。开发人员可以自由定义其含义。MVP顺序遵循标准的数学约定。但是,由于没有任何内容说明不能将向

大家好,我想知道为什么大多数教程和编程代码都使用MVP来描述模型视图投影矩阵。而不是PVM,这是代码中的实际实现顺序:

mat4 MVP = ProjectionMatrix * ViewMatrix * ModelMatrix;
gl_Position = MVP * VertexInModelSpace;

对我来说,写PVM而不是MVP似乎更容易理解。

矩阵实际上没有固定的含义,只是行和列之间的关系。开发人员可以自由定义其含义。MVP顺序遵循标准的数学约定。但是,由于没有任何内容说明不能将向量定义为列而不是行,因此没有任何内容排除这种排序

澄清:因为改变符号会转换意思。则适用以下规定:

MmvpT=Mpvm

由于矩阵乘法的定义,以下规则生效:

(AB)T=BTAT

因为B可以递归地与另一个矩阵相乘,所以这些矩阵的无限链是可能的。这就意味着你已经通过改变符号交换了乘法顺序

这有点像从外面看问题或从里面看问题。在这种情况下,你的思维是作为一个外部观察者。而另一种方法是从链中第一个操作符的角度观察事物。就我个人而言,我认为你使用的符号对于这个特定的任务可能更直观,而另一种更为常见。主要是因为我见过的所有数学书都使用这种惯例,所以要怪数学家


所以最好坚持用更普通的方式,让事情更普遍地理解。例如:没有什么能阻止我用芬兰语输入答案,但stackoverflow的惯例是用英语回答,这使得大多数用户更容易理解答案。使用更常见的形式,因为其他人可能无法理解差异,这会导致错误。

另一个问题是矩阵乘法不一定是可交换的:

AB != BA

因此,坚持传统是个好主意。

这是有意描述MVP的。首先是M,因为矩阵
M
首先应用于向量,然后是
V
矩阵,最后是
P
。矩阵乘法是关联的,因此最终向量等于
(P*(V*(M*向量))
。“操作顺序是由内而外的。”戴文:这是一种思考方式。您所说的方式对程序员非常友好。但这并不意味着另一种方法不那么正确。好吧,我当时的回答似乎不清楚。可以肯定地说,对于潮湿的部分,空间变换是不可交换的。然而,这与交换无关,而是如果你转置向量,那么你转置矩阵,对于平方矩阵,这只是将乘法顺序改为逆序。更新了我的答案,以便在这篇文章中更好地澄清问题是的,我知道转置是如何工作的。“潮湿”部件?哦,天哪。我们可能需要版主的关注。是的,我看到了拼写错误,但到那时我的评论的固定时间已经结束了,如果它让你更开心的话,我可以杀死它。但他真正想问的问题是,为什么不是DCBA,答案仍然有效。真的没有理由。我们刚刚同意向量是行而不是列。如果你达成了另一个协议,那么它是正确的,因为你把一切都转置了。与交换性无关。只是决定键入什么的问题。没有任何东西说矩阵是相同的,因为它们实际上是不同的。附言:事实上,我很高兴你帮助我理解了我的答案所缺少的东西。我只是在开玩笑——你的答案和我的一样都是正确的。正如您已经明确指出的,没有转置,提议的更改是不可能的。向量可以看作是行或列;他们的数学定义是一阶张量,不管怎样。