質問
私は 3D レンダリングについて学び始めており、かなり進歩しています。行列と、行列に対して実行できる一般的な演算に関して多くのことを取り上げました。
私がまだよく理解できていないことの 1 つは、OpenGL の行列の使用です。これ (およびそれに類するもの) をよく見かけます。
x y z n
-------
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
したがって、私の最も理解できることは、これは正規化された (大きさなし) 4 次元の列優先行列であるということです。また、この行列は特に「単位行列」と呼ばれます。
いくつかの質問:
- 「n」次元とは何ですか?
- これらはいつ、どのように適用されるのでしょうか?
私の最大の混乱は、OpenGL がこの種のデータをどのように利用するかによって生じます。
解決
あなたが始めるのに役立つかもしれない短い答えは、「n番目」の寸法は、あなたがそれを呼び出すように、任意の視覚化量を表していないということです。これは、翻訳と透視投影を引き起こす行列乗算を可能にするための実用的なツールとして添加されます。直感的な3×3行列は、これらのことを行うことはできません。
空間内の点を表す3Dの値は常に、このトリックを機能させるための第4の値として添付1を取得します。方向を表す3D値(すなわち通常、あなたがその用語に精通している場合)0 4位に付加されます。
他のヒント
が最も3Dグラフィックスの点1.通常の操作がポイントに適用さW = 4成分ベクトル(X、Y、Z、W)で表され、変換、スケーリング、回転、反射、スキュー及び組み合わせを含みますこれらの。
これらの変換は、「マトリックス」と呼ばれる数学的オブジェクトによって表すことができます。マトリックスは、このようなベクトルに適用されます:
[ a b c tx ] [ x ] [ a*x + b*y + c*z + tx*w ]
| d e f ty | | y | = | d*x + e*y + f*z + ty*w |
| g h i tz | | z | | g*x + h*y + i*z + tz*w |
[ p q r s ] [ w ] [ p*x + q*y + r*z + s*w ]
例えば、スケーリングは
のように表されます。[ 2 . . . ] [ x ] [ 2x ]
| . 2 . . | | y | = | 2y |
| . . 2 . | | z | | 2z |
[ . . . 1 ] [ 1 ] [ 1 ]
と翻訳
など[ 1 . . dx ] [ x ] [ x + dx ]
| . 1 . dy | | y | = | y + dy |
| . . 1 dz | | z | | z + dz |
[ . . . 1 ] [ 1 ] [ 1 ]
第四部品の理由のの の一つは行列によって翻訳表現を作ることです。のの
マトリックスを使用することの利点は、複数の変換は行列の乗算を介して一つに結合することができることである。
目的は、テーブルの上に翻訳をもたらすために、単純であれば、次に、私は言うだろう(X、Y、Zは、1)の代わりに(X、Y、Z、W)の行列の最後の行を作ります2Dグラフィックスのために通常行われるよう、常に、[0 0 0 1]
。実際には、4成分ベクトルは、この式を介して通常の3ベクトルベクトルに戻すマッピングされます。
[ x(3D) ] [ x / w ]
| y(3D) ] = | y / w |
[ z(3D) ] [ z / w ]
これは同次座標に呼ばれています。 の、これもマトリックスで表現透視投影を行う許可再び、他のすべての変換と組み合わせることができるの
遠くのオブジェクトが画面上に小さくなければならないので、たとえば、我々は3次元の式を用いて2次元に座標変換
x(2D) = x(3D) / (10 * z(3D))
y(2D) = y(3D) / (10 * z(3D))
今、私たちは射影行列を適用する場合は、
[ 1 . . . ] [ x ] [ x ]
| . 1 . . | | y | = | y |
| . . 1 . | | z | | z |
[ . . 10 . ] [ 1 ] [ 10*z ]
その後、本物の3D座標になるでしょう。
x(3D) := x/w = x/10z
y(3D) := y/w = y/10z
z(3D) := z/w = 0.1
私たちはただz座標2Dに投影するアウトをチョップする必要があります。