您好,我想知道为什么大多数教程和编程代码都使用 MVP 来描述模型-视图-投影矩阵。而不是 PVM 是代码中的实际实现顺序:
mat4 MVP = ProjectionMatrix * ViewMatrix * ModelMatrix;
gl_Position = MVP * VertexInModelSpace;
对我来说,编写 PVM 而不是 MVP 似乎更容易理解。
矩阵实际上并没有固定的含义,只是行和列之间的关系。其含义可由开发人员自由定义。MVP 顺序遵循标准数学约定。但是由于没有人说您不能将向量定义为列而不是行,因此没有什么可以排除这种排序。
澄清:因为改变符号会改变意思。然后以下适用:
M mvp T = M pvm
由于矩阵乘法的定义,以下规则生效:
(AB) T = B T A T
由于 B 可以递归地是另一个矩阵乘法,因此它们的无限链是可能的。这基本上意味着您已经通过更改符号交换了乘法顺序。
这有点像从外部看问题或从内部看问题。在这种情况下,您作为外部观察者的想法。而另一种方式则是从链中第一个操作员的角度观察事物。就我个人而言,我认为您使用的符号对于这个特定任务可能更直观,而另一种则更常见。主要是因为我见过的所有数学书籍都使用这个约定,所以怪不得数学家。
所以最好坚持使用更常见的方式,让事情更容易理解。例如:没有什么能阻止我用芬兰语输入答案,但 stackoverflow 的惯例是用英语回答,让大多数用户更容易理解答案。使用更常见的形式,因为其他人可能无法掌握差异,这会导致错误。
另一个问题是矩阵乘法不一定是可交换的:
AB != BA
所以坚持约定是个好主意。