1

私はOpenGLを初めて使用し、参照やチュートリアルを読むときに、これらすべてが既知のメカニズムとして行列を使用するため、誰かが抽象的な直感的な方法で私を説明できれば、行列を何に使用するのか疑問に思っていました. 私は数学で行列を学びましたが、英語が私の母国語ではないため、意味を理解するのが難しいものがあります。

www.learnopengl.com で良い例を見つけました。

The model matrix. This matrix is used to place a model somewhere in the “world”. For example, if you have a model of a car and you want it located 1000 meters to the east, you will use the model matrix to do this.
The view matrix. This matrix represents the camera. If we want to view our car which is 1000 meters to the east, we’ll have to move ourselves 1000 meters to the east as well (another way of thinking about it is that we remain stationary, and the rest of the world moves 1000 meters to the west). We use the view matrix to do this.
The projection matrix. Since our screens are flat, we need to do a final transformation to “project” our view onto our screen and get that nice 3D perspective. This is what the projection matrix is used for.

これはそれをかなりよく説明しています。しかし、どうやってそれらを構築するのでしょうか? それらはどのくらいの大きさですか?

また、私はこの質問を読みました: OpenGL で glLoadIdentity() は何をしますか?

それ:

glMatrixMode(GL_PROJECTION) は、透視変換または直交変換で使用される行列を扱います。

glMatrixMode(GL_MODELVIEW) は、モデル ビュー変換で使用される行列を処理します。つまり、オブジェクト (別名モデル) をビュー座標空間 (またはカメラ空間) に変換します。

これらの変換は何を意味し、どのように計算されるのでしょうか?

ここに多くの質問があることはわかっていますが、OpenGL をよりよく理解するために、これらすべての概念をよりよく理解しようとしています。そのため、概念を超えた概念を理解してすべての詳細に飛び込むために、抽象的な説明が必要です。

4

2 に答える 2

5

平行移動、回転、スケーリングはすべてアフィン変換であり、行列の乗算と加算を使用して実装できます。実際には、常に 1 である要素でベクトルを拡張することによりw、3 次元のアフィン変換は 4 次元の線形変換になり、必要なのは行列の乗算だけです。

(1) 高速であり、(2) どの演算にも特別なロジックが必要ないため、行列乗算で行うのは非常に優れています。これらのアフィン演算を必要な数だけ構成して、それを表現することもできます。単一のマトリックスで。

複数のマトリックス モードがあると、作曲時に役立ちます。マトリックスが 1 つしかない場合は、新しい操作を両端に追加できますが、中央には追加できません。後で 3 つの行列を掛け合わせることで、順序の 4 つの異なるポイントに新しい演算を挿入できます。

マトリックス スタックは、いくつかのプリミティブに対して操作を実行してから削除できるため、非常に便利です。逆の操作を行って操作を元に戻そうとすると、最終的に丸め誤差が制御不能になります。しかし、以前の行列を思い出すことで、回転などは起こらなかったかのように元に戻すことができます。

于 2013-07-22T23:22:31.503 に答える
1

OpenGL は、マトリックスを直接操作するのではなく、マトリックスを操作する関数を呼び出すことができるという点で優れています。

そのため、内部では (実際に何が起こるか)、オブジェクトを変換する行列がいくつかあります (オブジェクトをカメラ空間に変換するモデルビュー行列、および透視/直交変換用の射影行列)。

glMatrixModeは、使用および操作する行列のタイプを選択できるスイッチのようなもので、引数を使用して指定します。つまりglMatrixMode(GL_PROJECTION)、射影行列を操作することになります。

于 2013-07-22T23:10:43.617 に答える