图形学学习笔记二:观测变换

文章目录


一、旋转

三维空间中绕坐标轴旋转

R x ( α ) = ( 1 0 0 0 0 cos ⁡ α − sin ⁡ α 0 0 sin ⁡ α cos ⁡ α 0 0 0 0 1 ) R y ( α ) = ( cos ⁡ α 0 sin ⁡ α 0 0 1 0 0 − sin ⁡ α 0 cos ⁡ α 0 0 0 0 1 ) R z ( α ) = ( cos ⁡ α − sin ⁡ α 0 0 sin ⁡ α cos ⁡ α 0 0 0 0 1 0 0 0 0 1 ) \begin{array}{l}\mathbf{R}_{x}(\alpha)=\left(\begin{array}{cccc}1 & 0 & 0 & 0 \\0 & \cos \alpha & -\sin \alpha & 0 \\0 & \sin \alpha & \cos \alpha & 0 \\0 & 0 & 0 & 1\end{array}\right) \\\mathbf{R}_{y}(\alpha)=\left(\begin{array}{cccc}\cos \alpha & 0 & \sin \alpha & 0 \\0 & 1 & 0 & 0 \\-\sin \alpha & 0 & \cos \alpha & 0 \\0 & 0 & 0 & 1\end{array}\right) \\\mathbf{R}_{z}(\alpha)=\left(\begin{array}{cccc}\cos \alpha & -\sin \alpha & 0 & 0 \\\sin \alpha & \cos \alpha & 0 & 0 \\0 & 0 & 1 & 0 \\0 & 0 & 0 & 1\end{array}\right)\end{array} Rx​(α)=⎝⎜⎜⎛​1000​0cosαsinα0​0−sinαcosα0​0001​⎠⎟⎟⎞​Ry​(α)=⎝⎜⎜⎛​cosα0−sinα0​0100​sinα0cosα0​0001​⎠⎟⎟⎞​Rz​(α)=⎝⎜⎜⎛​cosαsinα00​−sinαcosα00​0010​0001​⎠⎟⎟⎞​​

其中绕y轴旋转比较特殊,可以通过向量叉乘去理解,x与y叉乘得到z,y与z叉乘得到x。这两个都是符合叉乘,通过另外另外两个轴右手逆时针旋转得到。而y是z与x叉乘的结果,这两个轴的右手旋转方向和转动方向相反,取负号。

三维空间中绕任意轴旋转

对于任意一个旋转 R x y z ( α , β , γ ) R_{xyz}(α,β,γ) Rxyz​(α,β,γ),可以由 R_x(α) 、R_y(β) 和 R z ( γ ) R_z( \gamma) Rz​(γ) 组成。其中,α 、β 和 γ 称为欧拉角(Euler Angles)。通过下图中的操作,可将飞机的头朝向任意方向。
罗德里格斯公式(Rodrigues’ Rotation Formula)
在三维旋转理论中,对于给定旋转轴和旋转角度,以Olinde Rodrigues命名的罗德里格斯公式是用于在空间旋转向量的高效算法。
旋转轴为 n 轴,旋转角为 α .默认旋转轴过原点(若不过原点,可想将其移至原点,然后做线性变换后,在将其平移至原位置)。其中,罗德里格斯公式如下:

图形学学习笔记二:观测变换

二、观测变换(View/Camera Transformation)

图形学学习笔记二:观测变换
上述三种变换即为MVP变换。
视图变换View Transformation
    视图变换是在摆一个照相机。如何才能确定一个相机的摆放

1 定义的三个要素

  • 位置
  • 观测的方向
  • 向上方向(正立,倒立的像)
    图形学学习笔记二:观测变换

2 进行视图变换

约定:相机在原点,向上指向 Y,看向 Z 方向。
图形学学习笔记二:观测变换

3 相机转换步骤

将相机转换到原点的标准方向
图形学学习笔记二:观测变换
先将其平移至原点。
再求旋转,先求得其逆变换再求逆,既可以得到变换矩阵(由于旋转变换矩阵为正交矩阵,其逆就是其转置)
图形学学习笔记二:观测变换
总结图形学学习笔记二:观测变换

投影变换(Rrojection Transformation)

图形学学习笔记二:观测变换

1 投影变换的分类

图形学学习笔记二:观测变换
其中,人眼成像类似于透视投影(右图);正交投影(左图)常用于工程制图。

透视投影是在一个点投射成四棱锥形成;正交显示若将相机放于无限远,远、*面将无限接近。

图形学学习笔记二:观测变换

2、正交投影

( 一 )3D化2D方法:

下图将去除z轴,投影移至 [ − 1 , 1 ] 2 [-1,1]^2 [−1,1]2,约定俗成。
图形学学习笔记二:观测变换

( 一 )3D方法:

定义一个空间中的立方体,将其映射成标准立方体 [ − 1 , 1 ] 3 [−1,1]^3 [−1,1]3中。“先平移再缩放”。
z轴用远和近表示
图形学学习笔记二:观测变换
变换矩阵
图形学学习笔记二:观测变换
坐标系选择不同,会导致结果不同。

三 透视投影

  1. 越远的对象越远
  2. 平行线不再相交

如何进行透视投影?(难点)

简单说,就是把这个Frustum的远平面f挤成同*面n一样大的平面,然后进行正交投影。
约定:
3. *面不变
4. 远平面f的中心点不变
5. Z值仍为f
图形学学习笔记二:观测变换
关于远平面挤压后坐标的变化,(通过相似三角形算出)等值关系:
图形学学习笔记二:观测变换
在齐次坐标中,利用上述相似关系
y ′ = n z y x ′ = n z x  (similar to y’)  y^{\prime}=\frac{n}{z} y \quad x^{\prime}=\frac{n}{z} x \text { (similar to y') } y′=zn​yx′=zn​x (similar to y’) 
( x y z 1 ) ⇒ ( n x / z n y / z  unknown  1 )  mult.   by  z = = ( n x n y  still unknown  z ) \left(\begin{array}{l}x \\y \\z \\1\end{array}\right) \Rightarrow\left(\begin{array}{c}n x / z \\n y / z \\\text { unknown } \\1\end{array}\right)^{\begin{array}{l}\text { mult. } \\\text { by } z \\==\end{array}}\left(\begin{array}{c}n x \\n y \\\text { still unknown } \\z\end{array}\right) ⎝⎜⎜⎛​xyz1​⎠⎟⎟⎞​⇒⎝⎜⎜⎛​nx/zny/z unknown 1​⎠⎟⎟⎞​ mult.  by z==​⎝⎜⎜⎛​nxny still unknown z​⎠⎟⎟⎞​
上述变换可以用矩阵表示如下,可以确定出变换矩阵的三行
图形学学习笔记二:观测变换
如何去确定剩下的一行呢?通过以下
1. 利用*面的点不变性 *面上的点在经过上述变换后坐标不变
计算出第三行的前两个问号,得出一个等式 A n + B = n 2 An+B=n^2 An+B=n2:
图形学学习笔记二:观测变换
2. 利用远平面的点,Z坐标值不变性,得出一个等式 A n + B = f 2 An+B=f^2 An+B=f2:
图形学学习笔记二:观测变换
联立上两式即可得
图形学学习笔记二:观测变换
Question:对于中间任意一点(x,y,z),在经过挤压后(将其变为立方体后),变换后的Z值会靠近远平面还是靠近*面?
Answer:会更大一些,乘以变换矩阵即可得到结果。

上一篇:使用腾讯云对象存储 COS 作为 Velero 后端存储,实现集群资源备份和还原


下一篇:Java Spring Security 5 报错:There is no PasswordEncoder mapped for the id “null”