Transformation Cont

补充上节课内容

旋转θ-\theta角的矩阵表示:Rθ=RθT=Rθ1R_{-\theta}=R^{T}_{\theta}=R^{-1}_{\theta}
GAMES101-Lecture 04
结论:在旋转里,旋转矩阵的逆就是旋转矩阵的转置。

正交矩阵:矩阵的逆=矩阵的转置

本节内容

  • Viewing transformation(视图变换)
    • View/Camera transformation
    • Projection(投影)transformation
      • Orthographic(正交) Projection
      • Perspective(透视)

View/Camera transformation

变换目的:将三维空间的物体变换成二维空间的照片。
MVP变换三步骤:

  • 模型变换(Model transformation):摆好模型
  • 视图变换(View transformation):改变相机的角度、位置等
  • 投影变换(Projection transformation):三维投影到二维

视图变换:

  • 首先定义相机:位置、往哪看(Look-at/gaze direction)、向上方向(相机头部的方向,向左偏、向右偏之类的)观察方向和向上方向是垂直的(因为镜头方向和相机头部垂直)
    GAMES101-Lecture 04
  • Key observation观察点
    • 如果相机和所有物体一起移动,则其相对位置没有改变,拍的照片也是一样的。
      GAMES101-Lecture 04
  • 设定相机的位置作为原点固定,永远朝向-z方向看,向上方向为y轴方向——相机在标准位置,其他物体跟随相机移动。
    GAMES101-Lecture 04

如何改变:
先把e\vec e平移到原点(0,0,0)(0,0,0),观察方向g\vec g旋转到-Z方向,向上方向t\vec t旋转到Y方向,g×t\vec{g}\times\vec{t}自然也旋转到了X方向
GAMES101-Lecture 04
矩阵表示:GAMES101-Lecture 04
先平移到原点:
GAMES101-Lecture 04
GAMES101-Lecture 04

再将观察方向g\vec g (xgygzg)\left(\begin{matrix}x_g\\y_g\\z_g\end{matrix}\right)旋转到-Z(001)\left(\begin{matrix}0\\0\\-1\end{matrix}\right)方向,向上方向t\vec t (xtytzt)\left(\begin{matrix}x_t\\y_t\\z_t\end{matrix}\right)旋转到Y(010)\left(\begin{matrix}0\\1\\0\end{matrix}\right)方向,(g×t)(\vec{g}\times\vec{t})旋转到X(100)\left(\begin{matrix}1\\0\\0\end{matrix}\right)方向这样很困难。
换一种思考方式,将X(100)\left(\begin{matrix}1\\0\\0\end{matrix}\right)旋转到(g×t)(\vec{g}\times\vec{t}),将Z(001)\left(\begin{matrix}0\\0\\1\end{matrix}\right)旋转到g\vec {-g}(xgygzg)\left(\begin{matrix}-x_g\\-y_g\\-z_g\end{matrix}\right),Y(010)\left(\begin{matrix}0\\1\\0\end{matrix}\right)旋转到t\vec t (xgygzg)\left(\begin{matrix}x_g\\y_g\\z_g\end{matrix}\right),然后该矩阵的逆即为所求矩阵。
GAMES101-Lecture 04
因为旋转矩阵是正交矩阵,所以直接将计算得到的逆矩阵Rview1R^{-1}_{view}转置即得到所求的矩阵RviewR_{view}

Projection transformation

两种投影方式:

Orthographic(正交) Projection
Perspective(透视)Projection:会有近大远小的现象
区别:正交对应平行线条还是平行的,透视对应平行线条延长后会相交。是否有近大远小的现象。
GAMES101-Lecture 04
正交投影是假设把相机拿到无限远,越远,物体的近处和远处的区别越不明显。
GAMES101-Lecture 04

Orthographic(正交) Projection

相机按标准摆放位置。
GAMES101-Lecture 04
假设把Z给扔掉,则’E’和‘■’都挤在了xy平面,再缩小范围,将图片缩放到[1,1]2[-1,1]^{2}矩形上。
GAMES101-Lecture 04
正交投影的正式操作

  1. 首先定义一个空间中的立方体[l,r]×[b,t]×[f,n][l,r]\times[b,t]\times[f,n],定义立方体的左右在x轴的哪一部分范围,下上在y轴的哪一部分范围,前后在z轴的哪一部分范围。
    因为右手坐标系,观察方向是沿着-Z方向,所以远坐标f的z值比近坐标n的z值更小。而OPENGL是左手坐标系,所以他的远坐标f的z值比近坐标n的z值更大。
  2. 将该立方体映射到正则立方体(规范、标准立方体)[1,1]3[-1,1]^{3}上。先将定义的立方体的中心移动到原点,然后将立方体xyz轴拉成[-1,1]的范围。
    GAMES101-Lecture 04

矩阵表示变换矩阵:(依旧是先平移到原点,再缩放)
GAMES101-Lecture 04

Perspective(透视)Projection

应用的最广泛的投影。
平行线不再平行:
GAMES101-Lecture 04
GAMES101-Lecture 04
强调:(x,y,z,1)(x,y,z,1)(kx,ky,kz,k),k0(kx,ky,kz,k),k\neq0表示的是同一个点(x,y,z,1)(x,y,z,1)。那么(xz,yz,z2,z),z0(xz,yz,z^2,z),z\neq0也表示的是(x,y,z,1)(x,y,z,1)
GAMES101-Lecture 04
透视的远平面更大。
GAMES101-Lecture 04
透视操作:
先把远平面f“挤成”和近平面n一样,即将锥体变成柱体,这样就从透视变成了正交。注意以下需要遵循的规则:

  • 近平面n永远不变,远平面f的z值不变
  • 远平面f的中心点不变

然后就按照正交投影的操作进行。

挤压的详细步骤:
侧视图:
GAMES101-Lecture 04

挤压后的坐标,同时乘z后依旧是那个坐标
GAMES101-Lecture 04
矩阵表示挤压:
GAMES101-Lecture 04
GAMES101-Lecture 04
将坐标与Mpersp>orthoM_{persp->ortho}矩阵相乘后:
① 在近平面(z轴坐标为n)上的任意一点(xyn1)\left(\begin{matrix}x\\y\\n\\1\end{matrix}\right)不会发生任何变化。
即:
GAMES101-Lecture 04
对于矩阵第三行可列方程:
GAMES101-Lecture 04
An+B=n2(1)An+B=n^2 \tag{1}
② 在远平面(z轴坐标为f)上的任意一点(xyf1)\left(\begin{matrix}x\\y\\f\\1\end{matrix}\right)它的z坐标f不会发生任何变化。
f平面的中点变换后坐标不变:
GAMES101-Lecture 04
(1)(2)联立,解得:A=n+f,B=nfA=n+f,B=-nf
故透视变正交矩阵:
Mpersp>ortho=(n0000n0000n+fnf0010)M_{persp->ortho}=\left(\begin{matrix}n&0&0&0\\0&n&0&0\\0&0&n+f&-nf\\0&0&1&0\end{matrix}\right)
透视矩阵:
GAMES101-Lecture 04

相关文章: