叩问不相同坐标连串转换的法则,掌握不相同坐标连串转换的原理

概要

那篇小说中,大家来聊聊 OpenGL 中的坐标连串以及它们之间的变换。

(⚠️阅读本文要求有线性代数基础。)

概要

那篇小说中,我们来聊聊 OpenGL 中的坐标种类以及它们中间的转移。

(⚠️阅读本文须要有线性代数基础。)

坐标变换原理

率先,大家须要运用一点线性代数的学识,通晓差别坐标种类转换的原理。
鉴于本文针对的是三维坐标,所以研商的上空是 \(R^3\) 空间。

在标准三维坐标系中,大家平常用一个向量 v=[x, y, z]
来表示一个点的职位。这里的 x、y、z 分别对应 x 轴、y 轴以及 z
轴七个方向的舞狮,而业内三维坐标空间的基采纳的是多少个相互垂直的向量 \(\mathbf e_1=[1,0,0]\), \(\mathbf e_2=[0,1,0]\), \(\mathbf
e_3=[0,0,1]\)。但据悉线性毫不相关等学问,大家全然可以找出别的三个向量作为三维空间的基,只要那两个向量线性毫不相关,同样可以张成
\(R^3\) 空间。

现在,假若坐标系 A 选择的基向量是 {\(\mathbf
v_1, \mathbf v_2, \mathbf v_3\)},坐标系 B 拔取的是{\(\mathbf u_1\), \(\mathbf u_2\), \(\mathbf u_3\)}。
那么,按照线性非亲非故性,我们能够博得线性方程组:
\[ {\mathbf u_1 = \gamma_{11}\mathbf
v1+\gamma_{12}\mathbf v2+\gamma_{13}\mathbf v_3} \]

\[ \mathbf u_2 = \gamma_{21}\mathbf
v1+\gamma_{22}\mathbf v2+\gamma_{23}\mathbf v_3 \]

\[ \mathbf u_3 = \gamma_{31}\mathbf
v1+\gamma_{32}\mathbf v2+\gamma_{33}\mathbf v_3 \]

用矩阵方程的款型表示为:

\[\mathbf u = \mathbf M \mathbf
v\]
由于 \(\mathbf u\), \(\mathbf v\)
都是三维空间的基,因而,对于三维空间内随意一个向量 \(\mathbf w\),\(\mathbf u\)、\(\mathbf
v\)都得以透过线性组合的章程意味着出 \(\mathbf w\):
\(\mathbf w = \mathbf a^T \mathbf v =
\mathbf b^T \mathbf u\)(这里的\(\mathbf a^T\), \(\mathbf
b^T\)分别表示差距坐标空间的标量)。
构成前边 \(\mathbf u = \mathbf M \mathbf
v\),进一步取得:\(\mathbf w =
\mathbf b^T \mathbf u = \mathbf b^T \mathbf M \mathbf v=\mathbf
a^T \mathbf v\),
继而 :\(\mathbf a = \mathbf M^T \mathbf
b\),\(\mathbf b = (\mathbf
M^T)^{-1} \mathbf a\)。

好了,到此处,关键的东西就讲完了。所以坐标连串的更换很粗略有木有!即使您在B坐标系(基向量为{\(\mathbf u_1\), \(\mathbf u_2\), \(\mathbf u_3\)})中有个向量 \(\mathbf w\),沿用上边的倘若,\(\mathbf w\) 的坐标为 \(\mathbf b\)(即 \(\mathbf w = \mathbf b^T \mathbf
u\)),这些时候,大家想求出它在 A 坐标系(基向量为{\(\mathbf v_1, \mathbf v_2, \mathbf
v_3\)})的坐标表示(假使为\(\mathbf
a\)),大家只需须求出矩阵 \(\mathbf
M\),则:\(\mathbf a = \mathbf M^T
\mathbf b\)。
反之同理。

其一时候,有同学可能会问矩阵 \(\mathbf
M\) 怎么求?
万一一个坐标体系的基向量为{\(\mathbf
u_1\), \(\mathbf u_2\),
\(\mathbf
u_3\)},而另一个体系使用标准向量{\(\mathbf e_1\), \(\mathbf e_2\), \(\mathbf e_3\)},假若存在关联:\(\mathbf u = \mathbf M^T \mathbf
e\)(这几个姿势的精晓是:假设 \(\mathbf M\)
是八个坐标序列的变换矩阵,那么四个系统内的随意向量可以由此那一个矩阵相互转换,基向量只然而是卓殊的向量,一样可以经过
\(\mathbf M\) 举行转移),那矩阵
\(\mathbf M\) 其实可以象征为 [\(\mathbf u_1, \mathbf u_2, \mathbf
u_3\)]。这么些结果其实很好领悟,只要换种写法:
\(\mathbf u = \begin{bmatrix} \mathbf u_1
\\ \mathbf u_2 \\ \mathbf u_3 \\
\end{bmatrix}\),\(\mathbf e =
\begin{bmatrix} \mathbf e_1 \\ \mathbf e_2 \\ \mathbf e_3
\\ \end{bmatrix}\),可以窥见,\(\mathbf e\)其实是一个单位矩阵。
而一旦是非标准坐标种类里头的转移,则需求解一个线性方程组:\(\mathbf u = \mathbf M^T \mathbf
v\),而且可以一定,这些解存在且唯一。

尽管从地点的推论中我们可以得出,分化坐标体系可以因而一个唯一的 3*3 矩阵
\(\mathbf M\)
来转换,但都是依照坐标原点相同的前提。固然原点也发生变化,那时就亟须引入第四个维度来代表平移的偏移量,也就是常说的齐次坐标。
引入第四维后,\(\mathbf u=[\mathbf
u_1,\mathbf u_2,\mathbf u_3,\mathbf p]\),\(\mathbf v=[\mathbf v_1,\mathbf v_2,\mathbf
v_3,\mathbf q]\),我们重新用一个矩阵 \(\mathbf M\)
来转换这多少个坐标连串,分歧的是,那里的 \(\mathbf M\) 是一个 4*4 的矩阵:
\[ \mathbf M= \begin{bmatrix}
\gamma_{11} & \gamma_{12} & \gamma_{13} & 0 \\ \gamma_{21} &
\gamma_{22} & \gamma_{23} & 0 \\ \gamma_{31} & \gamma_{32} &
\gamma_{33} & 0 \\ \gamma_{41} & \gamma_{42} & \gamma_{43} & 1
\\ \end{bmatrix} \]
\[ \mathbf u = \mathbf M^T * \mathbf v
\]
除外多出一维外,齐次坐标与地点运用的三维坐标本质上尚无不同,统计办法也基本一致,在对应到三维坐标系时,只需求放任第七个维度即可。

坐标变换原理

首先,大家必要接纳一点线性代数的学问,驾驭不一致坐标连串转换的规律。
由于本文针对的是三维坐标,所以商讨的半空中是 \(R^3\) 空间。

在专业三维坐标系中,大家见惯司空用一个向量 v=[x, y, z]
来代表一个点的职责。那里的 x、y、z 分别对应 x 轴、y 轴以及 z
轴多少个样子的晃动,而业内三维坐标空间的基选用的是多个相互垂直的向量 \(\mathbf e_1=[1,0,0]\), \(\mathbf e_2=[0,1,0]\), \(\mathbf
e_3=[0,0,1]\)。但基于线性无关等文化,我们一齐可以找出其余五个向量作为三维空间的基,只要那多个向量线性毫无干系,同样可以张成
\(R^3\) 空间。

最近,如果坐标系 A 拔取的基向量是 {\(\mathbf
v_1, \mathbf v_2, \mathbf v_3\)},坐标系 B 选择的是{\(\mathbf u_1\), \(\mathbf u_2\), \(\mathbf u_3\)}。
那就是说,依照线性毫不相关性,大家得以得到线性方程组:
\[ {\mathbf u_1 = \gamma_{11}\mathbf
v1+\gamma_{12}\mathbf v2+\gamma_{13}\mathbf v_3} \]

\[ \mathbf u_2 = \gamma_{21}\mathbf
v1+\gamma_{22}\mathbf v2+\gamma_{23}\mathbf v_3 \]

\[ \mathbf u_3 = \gamma_{31}\mathbf
v1+\gamma_{32}\mathbf v2+\gamma_{33}\mathbf v_3 \]

用矩阵方程的样式表示为:

\[\mathbf u = \mathbf M \mathbf
v\]
由于 \(\mathbf u\), \(\mathbf v\)
都是三维空间的基,因而,对于三维空间内随机一个向量 \(\mathbf w\),\(\mathbf u\)、\(\mathbf
v\)都足以经过线性组合的办法表示出 \(\mathbf w\):
\(\mathbf w = \mathbf a^T \mathbf v =
\mathbf b^T \mathbf u\)(这里的\(\mathbf a^T\), \(\mathbf
b^T\)分别表示分化坐标空间的标量)。
结缘前面 \(\mathbf u = \mathbf M \mathbf
v\),进一步赢得:\(\mathbf w =
\mathbf b^T \mathbf u = \mathbf b^T \mathbf M \mathbf v=\mathbf
a^T \mathbf v\),
继而 :\(\mathbf a = \mathbf M^T \mathbf
b\),\(\mathbf b = (\mathbf
M^T)^{-1} \mathbf a\)。

好了,到此处,关键的事物就讲完了。所以坐标连串的变换很粗略有木有!如若您在B坐标系(基向量为{\(\mathbf u_1\), \(\mathbf u_2\), \(\mathbf u_3\)})中有个向量 \(\mathbf w\),沿用下边的比方,\(\mathbf w\) 的坐标为 \(\mathbf b\)(即 \(\mathbf w = \mathbf b^T \mathbf
u\)),那个时候,我们想求出它在 A 坐标系(基向量为{\(\mathbf v_1, \mathbf v_2, \mathbf
v_3\)})的坐标表示(借使为\(\mathbf
a\)),我们只需须求出矩阵 \(\mathbf
M\),则:\(\mathbf a = \mathbf M^T
\mathbf b\)。
反之同理。

其一时候,有同学可能会问矩阵 \(\mathbf
M\) 怎么求?
假如一个坐标系列的基向量为{\(\mathbf
u_1\), \(\mathbf u_2\),
\(\mathbf
u_3\)},而另一个系统利用标准向量{\(\mathbf e_1\), \(\mathbf e_2\), \(\mathbf e_3\)},假使存在关联:\(\mathbf u = \mathbf M^T \mathbf
e\)(这么些姿势的明亮是:尽管 \(\mathbf M\)
是四个坐标体系的转换矩阵,那么三个系统内的随机向量可以由此这一个矩阵相互转换,基向量只不过是与众分歧的向量,一样可以经过
\(\mathbf M\) 举办更换),那矩阵
\(\mathbf M\) 其实可以代表为 [\(\mathbf u_1, \mathbf u_2, \mathbf
u_3\)]。这么些结果其实很好精晓,只要换种写法:
\(\mathbf u = \begin{bmatrix} \mathbf u_1
\\ \mathbf u_2 \\ \mathbf u_3 \\
\end{bmatrix}\),\(\mathbf e =
\begin{bmatrix} \mathbf e_1 \\ \mathbf e_2 \\ \mathbf e_3
\\ \end{bmatrix}\),能够发现,\(\mathbf e\)其实是一个单位矩阵。
而一旦是非标准坐标种类里面的转换,则需求解一个线性方程组:\(\mathbf u = \mathbf M^T \mathbf
v\),而且可以毫无疑问,这么些解存在且唯一。

尽管从上边的测算中我们可以汲取,差异坐标体系可以经过一个唯一的 3*3 矩阵
\(\mathbf M\)
来转换,但都是依照坐标原点相同的前提。假如原点也暴发变化,那时就务须引入第多个维度来代表平移的偏移量,也就是常说的齐次坐标。
引入第四维后,\(\mathbf u=[\mathbf
u_1,\mathbf u_2,\mathbf u_3,\mathbf p]\),\(\mathbf v=[\mathbf v_1,\永利集团娱乐官网,mathbf v_2,\mathbf
v_3,\mathbf q]\),大家重新用一个矩阵 \(\mathbf M\)
来转换那五个坐标种类,区其他是,那里的 \(\mathbf M\) 是一个 4*4 的矩阵:
\[ \mathbf M= \begin{bmatrix}
\gamma_{11} & \gamma_{12} & \gamma_{13} & 0 \\ \gamma_{21} &
\gamma_{22} & \gamma_{23} & 0 \\ \gamma_{31} & \gamma_{32} &
\gamma_{33} & 0 \\ \gamma_{41} & \gamma_{42} & \gamma_{43} & 1
\\ \end{bmatrix} \]
\[ \mathbf u = \mathbf M^T * \mathbf v
\]
除开多出一维外,齐次坐标与地点使用的三维坐标本质上从未有过区分,计算办法也基本一致,在对应到三维坐标系时,只要求扬弃第多个维度即可。

OpenGL中的坐标系列

OpenGL 的坐标连串有三种:

  1. Object (or model) coordinates
  2. World coordinates
  3. Eye (or camera) coordinates
  4. Clip coordinates
  5. Normalized device coordinates
  6. Window (or screen) coordinates

模型坐标系 (Object coordinates)
是各种模型在炮制时有意的,若是要把模型放入世界,就需要将有着模型的坐标系转换成世界坐标系
(World
coordinates)。世界中的场景须求通过相机被人眼观察,需求将世界坐标系转换成相机坐标系
(Eye
coordinates)。从模型坐标系,到世界坐标系,再到相机坐标系的转换,平时称为
model-view transformation,通过 model-view matrix 来落到实处。
前三种坐标种类平时是由用户指定的,而后二种坐标体系一般都是在 OpenGL
管道中,由程序自己完毕的。
而 OpenGL
中坐标连串转换的规律,其实就是地点所讲的那些,只不过在行使时,我们可以动用一些
API 来简化不少工作。

OpenGL中的坐标种类

OpenGL 的坐标连串有多种:

  1. Object (or model) coordinates
  2. World coordinates
  3. Eye (or camera) coordinates
  4. Clip coordinates
  5. Normalized device coordinates
  6. Window (or screen) coordinates

模型坐标系 (Object coordinates)
是各类模型在制作时有意的,如若要把模型放入世界,就必要将具有模型的坐标系转换成世界坐标系
(World
coordinates)。世界中的场景需求通过相机被人眼观望,须求将世界坐标系转换成相机坐标系
(Eye
coordinates)。从模型坐标系,到世界坐标系,再到相机坐标系的更换,寻常号称
model-view transformation,通过 model-view matrix 来兑现。
前三种坐标种类平时是由用户指定的,而后三种坐标系列一般都是在 OpenGL
管道中,由程序自己完成的。
而 OpenGL
中坐标连串转换的原理,其实就是地方所讲的那多少个,只可是在运用时,大家得以行使部分
API 来简化不少办事。

参考

  • Interactive Computer Graphics – A Top-Down Approach 6e By Edward
    Angel and Dave Shreiner (Pearson, 2012)

参考

  • Interactive Computer Graphics – A Top-Down Approach 6e By Edward
    Angel and Dave Shreiner (Pearson, 2012)

相关文章