计算机图形学笔记 #1

3D Rotation

表示方法1:欧拉角

通过围绕xyz轴的旋转矩阵的乘积来表示整个旋转。以下讨论均在齐次坐标下进行。For example:

\[R_x = \begin{pmatrix} 1 & O & 0 \\ 0 & R(\theta) & 0 \\ 0&O&1\end{pmatrix} \]

这是一个在齐次坐标下的旋转矩阵(围绕x)。最后的变换总是可以写成

\[R = R_x R_yR_z \]

表示方法2:Rodrigues' Rotation Formula

考虑一个旋转\(\alpha\)角度,以\(\mathbf{n}\)为旋转轴,则旋转可以表示为

\[R(\alpha,\mathbf{n}) = \cos(\alpha)I + (1-\cos(\alpha))\mathbf{n}\mathbf{n}^T+\sin(\alpha) \begin{pmatrix}0 & -n_z&n_y\\n_z&0&-n_x\\-n_y&n_x&0\end{pmatrix} \]

View / Camera Transformation

MVP三部曲

给物体拍照分三步:

  1. Find a good place (Model transformation)
  2. Find a good angle (View transformation)
  3. Take a photo (Project transformation)

View transformation

Define a camera

定义一个相机需要三个要素:

  1. Position \(\mathbf{e}\)
  2. Gaze Direction \(\mathbf{g\times [f,n]}到一个正则立方体(Canonical Cube)\)[-1,1]^3\(中来\)。与之前简单的方法不同的是,这里的步骤为:
  • 移动中心
  • Scale
  1. Up direction \(\mathbf{t}\)

考虑到如果物体与相机同步运动的话观察到的物体还是不变的,那么不妨把相机固定到O点 ,同时上方为y
,看向-z。上述是约定俗成的。

下面来考虑如何通过矩阵\(M_v\)把相机转换到上述规定的位置上面去

  • Translate \(\mathbf{e}\) to the origin
  • Rotate \(\mathbf{g}\) to -z
  • Rotate \(\mathbf{t}\) to y
  • Rotate \(\mathbf{g}\times \mathbf{t}\) to x

最后一个在前面三个步骤完成的时候自然就成立了。下面来书写这个矩阵。以下讨论的几个矩阵都是在齐次坐标下进行的

Step1:移动 e

\[T = \begin{pmatrix} I & -\mathbf{e} \\ O &1 \end{pmatrix} \]

Step2;旋转
考虑它的逆变换:x to \(g \times t\) , y to t, z to -g。这里我们把几个方向都取成单位向量(其实方向本来就应该是定义成单位向量的形式)

\[R^{-1} = \begin{pmatrix} v_{g\times t} & v_t & v_{-g} & (O &1)^T \end{pmatrix} \]

由于左侧部分的正交性,我们可以写出其逆矩阵为

\[R = R^{-T} \]

Projection

Orthographic Projection

简简单单的三部曲

  • 相机移动到上述规定的位置
  • 丢物体的z坐标
  • 把物体的坐标变换到\([-1,1]^2\)中来

规范点的做法
我们希望把一个立方体区域\([l,r]\times [b,t]\times [f,n]\)到一个正则立方体(Canonical Cube)\([-1,1]^3\)中来。与之前简单的方法不同的是,这里的步骤为:

  • 移动中心
  • Scale

注意这里关于前后的定义: 这里的前实际上是z轴的负方向更远,也就是说对于我相机所拍摄的画面看,“远”是前面,“近”是后面
这个变换的矩阵是显而易见的

Perspective Projection

以下内容全部变成了\(\mathbb{RP}^3\)或者\(\mathbb{RP}^2\)中的数学问题

透视投影的步骤:

  • “挤压”你的视锥到一个立方体 这一步相当于把原来的空间变换到了“看到的”空间
  • 做正交投影

可以写出两步的矩阵变换如下:
参数的假定如图所示
image
第一步得目标为:
image

目标:

\[x \mapsto \frac{n}{z} x =: x' \\ y \mapsto \frac{n}{z} y =: y' \]

考虑到在齐次坐标的情况下:

\[\begin{pmatrix}x \\ y \\ z\\1 \end{pmatrix} \mapsto \begin{pmatrix}\frac{n}{z} x\\ \frac{n}{z} y \\* \\1 \end{pmatrix} \overset{\times z}{=}\begin{pmatrix}nx\\ny\\*\\ 1\end{pmatrix} \]

这里的第三个维度之所以为 “*”,是因为这个式子是针对所有变换的点的,并不是单独指的前面的n平面与远处的f平面(这里的n、f两个平面z坐标在变换下规定为不变)
初步确定这个矩阵为:

\[\begin{pmatrix} n&0&0&0\\0&n&0&0\\*&*&*&*\\0&0&1&0 \end{pmatrix} \]

现在来确定第三行的取值。考虑到第三行x、y都与z的取值没有关系,因而第三行为\((0\ 0\ A\ B)\)的形式。考虑Near plane & Far plane有:

\[\begin{pmatrix}x\\y\\n\\1\end{pmatrix} \mapsto \begin{pmatrix}nx\\ny\\n^2\\n\end{pmatrix} \\ \begin{pmatrix}x\\y\\f\\1\end{pmatrix} \mapsto \begin{pmatrix}fx \\ fy \\ f^2 \\f\end{pmatrix} \]

则有:

\[\begin{cases} An + B = n^2 \\ Af + B = f^2 \end {cases} \]

解得

\[\begin{cases} A = n + f\\ B = - nf \end {cases} \]

综上可以求得变换矩阵为:

\[\begin{pmatrix} n&0&0&0\\0&n&0&0\\0&0&n+f&-nf\\0&0&1&0 \end{pmatrix} \]

posted @ 2022-05-29 18:38  SyouSanGin  阅读(87)  评论(0)    收藏  举报