GAMES101-Lecture 04

Transformation Cont

补充上节课内容

旋转 − θ -\theta θ角的矩阵表示: R − θ = R θ T = R θ − 1 R_{-\theta}=R^{T}_{\theta}=R^{-1}_{\theta} Rθ=RθT=Rθ1
在这里插入图片描述
结论:在旋转里,旋转矩阵的逆就是旋转矩阵的转置。

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

本节内容

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

View/Camera transformation

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

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

视图变换:

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

如何改变:
先把 e ⃗ \vec e e 平移到原点 ( 0 , 0 , 0 ) (0,0,0) (0,0,0),观察方向 g ⃗ \vec g g 旋转到-Z方向,向上方向 t ⃗ \vec t t 旋转到Y方向, g ⃗ × t ⃗ \vec{g}\times\vec{t} g ×t 自然也旋转到了X方向
在这里插入图片描述
矩阵表示:在这里插入图片描述
先平移到原点:
平移矩阵
在这里插入图片描述

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

Projection transformation

两种投影方式:

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

Orthographic(正交) Projection

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

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

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

Perspective(透视)Projection

应用的最广泛的投影。
平行线不再平行:
平行线不再平行
在这里插入图片描述
强调: ( x , y , z , 1 ) (x,y,z,1) (x,y,z,1) ( k x , k y , k z , k ) , k ≠ 0 (kx,ky,kz,k),k\neq0 (kx,ky,kz,k),k=0表示的是同一个点 ( x , y , z , 1 ) (x,y,z,1) (x,y,z,1)。那么 ( x z , y z , z 2 , z ) , z ≠ 0 (xz,yz,z^2,z),z\neq0 (xz,yz,z2,z),z=0也表示的是 ( x , y , z , 1 ) (x,y,z,1) (x,y,z,1)
举例
透视的远平面更大。
在这里插入图片描述
锥体定义方式:
从摄像机出发看向某个区域,假设看到的是近平面n,则为近平面定义一个高度和宽度,宽高比Aspect ratio=width/height。
垂直可视角度Vertical Field of View,角度越大,所看到的范围大,角度越小,所看到的范围远。
水平可视角度可由垂直可视角度与宽高比得出。
在这里插入图片描述
在这里插入图片描述
所以正常情况下定义一个视锥,只需要定义宽高比和垂直可视角度,其他可以自动转化到定义一个正交投影区域的远近左右上下的操作。

透视操作:
先把远平面f“挤成”和近平面n一样,即将锥体变成柱体,这样就从透视变成了正交。注意以下需要遵循的规则:

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

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

挤压的详细步骤:
侧视图:
在这里插入图片描述

挤压后的坐标,同时乘z后依旧是那个坐标
挤压坐标
矩阵表示挤压:
在这里插入图片描述
矩阵
将坐标与 M p e r s p − > o r t h o M_{persp->ortho} Mpersp>ortho矩阵相乘后:
① 在近平面(z轴坐标为n)上的任意一点 ( x y n 1 ) \left(\begin{matrix}x\\y\\n\\1\end{matrix}\right) xyn1不会发生任何变化。
即:
在这里插入图片描述
对于矩阵第三行可列方程:
方程
A n + B = n 2 (1) An+B=n^2 \tag{1} An+B=n2(1)
② 在远平面(z轴坐标为f)上的任意一点 ( x y f 1 ) \left(\begin{matrix}x\\y\\f\\1\end{matrix}\right) xyf1它的z坐标f不会发生任何变化。
f平面的中点变换后坐标不变:
在这里插入图片描述
(1)(2)联立,解得: A = n + f , B = − n f A=n+f,B=-nf A=n+f,B=nf
故透视变正交矩阵:
M p e r s p − > o r t h o = ( n 0 0 0 0 n 0 0 0 0 n + f − n f 0 0 1 0 ) 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) Mpersp>ortho=n0000n0000n+f100nf0
透视矩阵:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值