计算机图形学2

三维

(x,y,z,1)\begin{pmatrix} x,y,z,1 \end{pmatrix}表示point, (x,y,z,0)\begin{pmatrix}x,y,z,0\end{pmatrix}表示vector

(xyz1)=(abcdxdefdyghidz0001)(xyz1)\begin{pmatrix} x^{'} \\ y^{'}\\ z^{'} \\ 1 \end{pmatrix} = \begin{pmatrix} a&b&c&dx\\d&e&f&dy\\g&h&i&dz\\0&0&0&1 \end{pmatrix}\begin{pmatrix} x\\ y\\ z \\1 \end{pmatrix}

旋转

旋转矩阵是正交矩阵,正交矩阵的转置与它的逆相同
假设绕某个轴旋转

Rx(α)=(10000cosαsinα00sinαcosα00001)\mathbf{R}_x(\alpha) = \begin{pmatrix} 1&0&0&0\\0&\cos\alpha&-\sin\alpha&0\\0&\sin\alpha&\cos\alpha&0\\0&0&0&1 \end{pmatrix}

Ry(α)=(cosα0sinα00100sinα0cosα00001)\mathbf{R}_y(\alpha) = \begin{pmatrix} \cos\alpha&0&\sin\alpha&0\\0&1&0&0\\-\sin\alpha&0&\cos\alpha&0\\0&0&0&1 \end{pmatrix}

Rz(α)=(cosαsinα00sinαcosα0000100001)\mathbf{R}_z(\alpha) = \begin{pmatrix} \cos\alpha&-\sin\alpha&0&0\\\sin\alpha&\cos\alpha&0&0\\0&0&1&0\\0&0&0&1 \end{pmatrix}

x×zx \times z 沿 yy 轴负方向,所以绕 yy 轴旋转时正负号有所变化

自由旋转

Rx(α,β,γ)=Rx(α)Rx(β)Rx(γ)\mathbf{R}_x(\alpha,\beta,\gamma) = \mathbf{R}_x(\alpha)\mathbf{R}_x(\beta)\mathbf{R}_x(\gamma)

称为Euler angles(欧拉角),将复杂的旋转分解为绕三个轴不同程度的旋转

Rodrigues’ Rotation Formula

默认旋转轴经过原点,将物体以nn为轴转α\alpha角度

R(n,α)=cos(α)I+(1cos(α))nnT+sin(α)(0nznynz0nxnynx0)\mathbf{R}(\mathbf{n}, \alpha) = \cos(\alpha)\mathbf{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 Transformation 视图变换

MVP变换->model、view、projection(模型、视图、投影)

首先定义相机

  • position e\vec{e}
  • look-at direction g^\hat{g}
  • up direction t^\hat{t}
    只要相机与物体之间相对位置不变,拍出照片始终相同。为此,我们可以将相机移动到原点,看向z-z轴方向,向上yy轴方向。

因此,首先我们需要将其移动到原点,然后旋转使得方向对齐。

平移操作

T=(100xe010ye001ze0001)T = \begin{pmatrix} 1&0&0&-x_e\\ 0&1&0&-y_e\\ 0&0&1&-z_e\\ 0&0&0&1 \end{pmatrix}

对于旋转操作,我们可以从逆过程来考虑。考虑将正常坐标系旋转至原始矩阵。

Projection Transformation 投影变换

正交投影与透视投影


透视投影给人一种近大远小的感觉

正交投影

简单理解方式,摆好相机之后,将z轴方向扔掉。就可以在x,y平面上看到正交投影的结果。
一般来说,我们需要将结果缩放到[1,+1]2[-1,+1]^2之间

透视投影

一些特点:

  1. 近平面各个点不变
  2. 原平面各个点z值不变
  3. 中心点不变

(xyz1)(nx/zny/zunknown1)=(xnynunknownz)\begin{pmatrix} x\\y\\z\\1 \end{pmatrix} \rightarrow \begin{pmatrix} nx/z\\ny/z \\ unknown\\ 1 \end{pmatrix} =\begin{pmatrix} xn\\yn\\unknown \\z \end{pmatrix}

根据上式,变换矩阵可以写为

(n0000n00????0010)\begin{pmatrix} n&0&0&0\\ 0&n&0&0\\ ?&?&?&?\\ 0&0&1&0 \end{pmatrix}

根据特点123求解第三行
首先根据特点1,可得

z=n(nx/nny/nn1)=(nxnyn2n)z = n \\ \begin{pmatrix} nx/n\\ny/n\\n\\1 \end{pmatrix} = \begin{pmatrix} nx\\ny\\n^2\\n \end{pmatrix}

不妨设第三行为

(00AB)(xyn1)=n2\begin{pmatrix} 0 & 0 & A & B \end{pmatrix} \begin{pmatrix} x \\ y \\ n \\ 1 \end{pmatrix} = n^2

同理,根据2和3,对于远平面的中点,我们有

(00AB)(00f1)=f2\begin{pmatrix} 0 & 0 & A & B \end{pmatrix} \begin{pmatrix} 0 \\ 0 \\ f \\ 1 \end{pmatrix} = f^2

解得

A=n+f,B=nfA = n + f, B = -nf


计算机图形学2
https://dreamerland.cn/2024/03/06/计算机图形学/计算机图形学2/
作者
Silva31
发布于
2024年3月6日
许可协议