本篇文章讲述三维笛卡尔坐标系的变换
对于3D引擎来说,把一个向量或者点从一个坐标系转换到另一个坐标系是基本的操作,比如一个模型的顶点坐标通常以对象空间的坐标形式保存,而在渲染该模型前,顶点坐标必须变换到虚拟相机空间才能被正确处理,这里就涉及到了坐标系的变换
假设现在有一个坐标系
C
1
C_1
C1,点
P
P
P在坐标系
C
1
C_1
C1内的坐标为
P
=
(
x
,
y
,
z
)
P = (x,y,z)
P=(x,y,z)
现在有另一个坐标系
C
2
C_2
C2,点
P
P
P在坐标系
C
2
C_2
C2内的坐标可以表示为
P
=
(
x
1
,
y
1
,
z
1
)
P = (x_1,y_1,z_1)
P=(x1,y1,z1)
而
(
x
1
y
1
z
1
1
)
=
M
(
x
y
z
1
)
\begin {pmatrix} x_1\\ y_1\\ z_1\\ 1 \end {pmatrix} = M \begin {pmatrix} x\\ y\\ z\\ 1 \end {pmatrix}
x1y1z11
=M
xyz1
中,
4
×
4
4\times 4
4×4矩阵
M
M
M就称为坐标系
C
1
C_1
C1到坐标系
C
2
C_2
C2的转换矩阵
假设
M
=
(
i
x
,
j
x
,
k
x
,
t
x
i
y
,
j
y
,
k
y
,
t
y
i
z
,
j
z
,
k
z
,
t
z
0
,
0
,
0
,
1
)
M = \begin {pmatrix} i_x&,j_x&,k_x&,t_x\\ i_y&,j_y&,k_y&,t_y\\ i_z&,j_z&,k_z&,t_z\\ 0&,0&,0&,1 \end {pmatrix}
M=
ixiyiz0,jx,jy,jz,0,kx,ky,kz,0,tx,ty,tz,1
- i i i列表示坐标系 C 1 C_1 C1的x轴单位向量在坐标系 C 2 C_2 C2中的表示
- j j j列表示坐标系 C 1 C_1 C1的y轴单位向量在坐标系 C 2 C_2 C2中的表示
- k k k列表示坐标系 C 1 C_1 C1的z轴单位向量在坐标系 C 2 C_2 C2中的表示
- t t t列表示坐标系 C 1 C_1 C1的原点在坐标系 C 2 C_2 C2中的表示
根据上面的介绍,我们可以得出对于任何的仿射变换,比如模型空间到世界空间的变换就是仿射变换,我们都可以表示成平移向量和三个正交基向量的组合。
如果我们得到模型空间到世界空间的变换矩阵,我们就能够直接通过变换矩阵获取模型局部坐标系的三个轴在世界空间中的方向。