ほとんどの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座標を切り取る必要があります。