在大多数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 ]
之一为第四分量的原因是使矩阵表示的翻译。
使用矩阵的优点是可以通过矩阵乘法将多个变换组合成一个变换。 (x,y,z,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 ]
这被称为homogeneous coordinates。 允许这使得透视投影表达与矩阵也可与所有其他转换再次结合。
例如,由于对象距离越远应该在屏幕上变小,我们变换如果我们应用投影矩阵
[ 1 . . . ] [ x ] [ x ]
| . 1 . . | | y | = | y |
| . . 1 . | | z | | z |
[ . . 10 . ] [ 1 ] [ 10*z ]
那么真实的三维坐标转换成二维使用式
x(2D) = x(3D)/(10 * z(3D))
y(2D) = y(3D)/(10 * z(3D))
现在3D坐标将变为
x(3D) := x/w = x/10z
y(3D) := y/w = y/10z
z(3D) := z/w = 0.1
所以我们只需要将z - 协调投影到2D。
查阅“游戏和互动应用基础数学”一书。 –
归一化的向量不是“无量级”。归一化矢量的长度/数量为1. – alesplin
谢谢!我想我对理解感到厌烦。至少我是在正确的轨道上。 ;) –