5

こんにちは、ほとんどのチュートリアルとプログラミング コードで MVP を使用して Model-View-Projection マトリックスを記述している理由を知りたいと思っていました。コードでの実装の実際の順序である PVM の代わりに:

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

MVP の代わりに PVM を書く方がずっと理解しやすいようです。

4

2 に答える 2

4

行列は実際には固定された意味を持っているわけではなく、行と列の間の関係にすぎません。意味は、開発者が自由に定義できます。MVP の順序は、標準の数学的規則に従います。しかし、ベクトルを行ではなく列として定義できないとは何も言っていないので、この順序付けを妨げるものは何もありません。

明確化:記法を変更すると意味が変わるため。次に、以下が適用されます。

M mvp T = M pvm

行列乗算の定義により、次のルールが適用されます。

(AB) T = B T A T

B は再帰的に別の行列乗算になる可能性があるため、これらの無限連鎖が可能です。これは本質的に、表記法を変更することによって、乗算順序を交換したことを意味します。

問題を外側から見たり、問題を内側から見たりするようなものです。この場合、外部の観察者としてのあなたの考え。逆に、チェーンの最初のオペレーターの観点から物事を観察します。個人的には、この特定のタスクでは使用する表記の方がより直感的であると思いますが、もう一方はより一般的です。主に、私がこれまでに見たすべての数学の本がこの規則を使用しているという事実が原因で、数学者を非難します。

したがって、より一般的な方法に固執することで、物事がより一般的に理解できるようになります。例: フィンランド語で回答を入力することを妨げるものは何もありませんが、stackoverflow の慣習は英語で回答することであり、ほとんどのユーザーにとって回答がより理解しやすいものになっています。他の人は違いを理解できない可能性があり、これがエラーにつながる可能性があるため、より一般的な形式を使用してください。

于 2012-12-26T14:36:41.693 に答える
0

もう 1 つの問題は、行列の乗算が必ずしも交換可能ではないことです。

AB != BA

したがって、慣習に従うことをお勧めします。

于 2012-12-26T22:38:23.203 に答える