20

私は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がこの種のデータをどのように利用するかから生じます。

4

2 に答える 2

65

ほとんどの3Dグラフィックスでは、ポイントは4成分ベクトル(x、y、z、w)で表されます。ここで、w = 1です。ポイントに適用される通常の操作には、平行移動、スケーリング、回転、反射、傾斜、およびこれらの組み合わせが含まれます。

これらの変換は、「行列」と呼ばれる数学的オブジェクトで表すことができます。行列は次のようなベクトルに適用されます。

[ 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    ]

4番目のコンポーネントの理由の1つは、翻訳をマトリックスで表現できるようにすることです。

行列を使用する利点は、行列の乗算を介して複数の変換を1つに結合できることです。

さて、目的が単にテーブルに翻訳をもたらすことである場合、(x、y、z、w)の代わりに(x、y、z、1)と言い、マトリックスの最後の行を常に次[0 0 0 1]のようにします。通常、2Dグラフィックスに対して行われます。実際、4成分ベクトルは、次の式を介して通常の3ベクトルベクトルにマッピングされます。

[ x(3D) ]   [ x / w ]
| y(3D) ] = | y / w |
[ z(3D) ]   [ z / w ]

これは同次座標と呼ばれます。これを許可すると、透視投影もマトリックスで表現可能になり、他のすべての変換と組み合わせることができます。

たとえば、遠くにあるオブジェクトは画面上で小さくする必要があるため、式を使用して3D座標を2Dに変換します。

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

したがって、2Dに投影するには、z座標を切り取る必要があります。

于 2010-03-17T19:37:41.390 に答える
3

あなたが始めるのを助けるかもしれない短い答えは、あなたがそれを呼ぶように、「n番目の」次元は視覚化可能な量を表さないということです。これは、変換と透視投影を引き起こす行列の乗算を可能にする実用的なツールとして追加されています。直感的な3x3マトリックスでは、これらのことはできません。

空間内のポイントを表す3D値は、このトリックを機能させるために、常に4番目の値として1が追加されます。方向を表す3D値(つまり、その用語に精通している場合は法線)は、4番目のスポットに0が追加されます。

于 2010-03-18T15:48:14.070 に答える