在大多数 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 个组件的原因之一是使平移可以用矩阵表示。
使用矩阵的优点是可以通过矩阵乘法将多个变换合并为一个。
现在,如果目的只是将翻译放在桌面上,那么我会说 (x, y, z, 1) 而不是 (x, y, z, w) 并制作矩阵的最后一行总是[0 0 0 1],就像通常用于 2D 图形一样。实际上,4-component 向量会通过这个公式映射回正常的 3-vector 向量:
[ x(3D) ] [ x / w ]
| y(3D) ] = | y / w |
[ z(3D) ] [ z / w ]
这称为homogeneous coordinates。 允许这样使得透视投影也可以用矩阵表达,它可以再次与所有其他变换结合。
例如,由于更远的物体在屏幕上应该更小,我们使用公式将 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
所以我们只需要将 z 坐标切掉以投影到 2D。