计算机图形学(三) -- 3D 变换
创始人
2024-02-20 16:46:54

文章目录

  • 3D 变换
    • 缩放(Scale)
    • 平移(Translation)
    • 旋转(Rotation)
    • 3D 旋转(3D Rotation)
  • 什么是欧拉角
      • 罗德里格斯旋转公式(Rodrigues' Rotation Formula)
  • Viewing transformation
    • 什么是 View / Camera Transformation
      • 相机标准位置(约定俗成)
      • 怎样将一个相机从一个任意的摆放,放到一个标准位置![在这里插入图片描述](/uploadfile/202402/a7ded8416683091.png)
      • 使用数学方式表示相机到标准位置的变换
    • 投影变换(Projection Transformation)
      • 正交投影和透视投影的区别
      • 正交投影
        • 正交投影的变换矩阵
    • 透视投影(Perspective Projection)
      • 怎样实现透视投影
      • 计算透视投影的变换矩阵

3D 变换

同样引入齐次坐标:

  • 3D 点 = (x,y,z,1)T(x, y, z, 1)^T(x,y,z,1)T
  • 3D 向量 = (x,y,z,0)T(x, y, z, 0)^T(x,y,z,0)T
    通常,(x,y,z,w)(x, y, z, w)(x,y,z,w)(w != 0) 表示一个坐标为 (x/w,y/w,z/w)(x/w, y/w, z/w)(x/w,y/w,z/w) 的 3D 点

用一个 4x4 的矩阵来表示 3D 的仿射变换
(x′y′z′1)\begin{pmatrix}x'\\y'\\z'\\1\end{pmatrix}⎝⎜⎜⎛​x′y′z′1​⎠⎟⎟⎞​ = (abctxdeftyghitz0001)\begin{pmatrix}a&b&c&t_x\\d&e&f&t_y\\g&h&i&t_z\\0&0&0&1\end{pmatrix}⎝⎜⎜⎛​adg0​beh0​cfi0​tx​ty​tz​1​⎠⎟⎟⎞​.(xyz1)\begin{pmatrix}x\\y\\z\\1\end{pmatrix}⎝⎜⎜⎛​xyz1​⎠⎟⎟⎞​

2D/3D 变换中,是先做旋转(线性变换)再做平移

缩放(Scale)

S(sx,sy,sz)S(s_x, s_y, s_z)S(sx​,sy​,sz​) = (sx0000sy0000sz00001)\begin{pmatrix}s_x&0&0&0\\0&s_y&0&0\\0&0&s_z&0\\0&0&0&1\end{pmatrix}⎝⎜⎜⎛​sx​000​0sy​00​00sz​0​0001​⎠⎟⎟⎞​

平移(Translation)

T(tx,ty,tz)T(t_x, t_y, t_z)T(tx​,ty​,tz​) = (100tx010ty001tz0001)\begin{pmatrix}1&0&0&t_x\\0&1&0&t_y\\0&0&1&t_z\\0&0&0&1\end{pmatrix}⎝⎜⎜⎛​1000​0100​0010​tx​ty​tz​1​⎠⎟⎟⎞​

旋转(Rotation)

绕 x, y, z 三个轴分别做旋转的情况:
在这里插入图片描述

  • 绕 X 轴旋转
    Rx(α)R_x(\alpha)Rx​(α) = (10000cosα−sinα00sinαcosα00001)\begin{pmatrix}1&0&0&0\\0&cos\alpha&-sin\alpha&0\\0&sin\alpha&cos\alpha&0\\0&0&0&1\end{pmatrix}⎝⎜⎜⎛​1000​0cosαsinα0​0−sinαcosα0​0001​⎠⎟⎟⎞​
  • 绕 Y 轴旋转
    Ry(α)R_y(\alpha)Ry​(α) = (cosα0sinα00100−sinα0cosα00001)\begin{pmatrix}cos\alpha&0&sin\alpha&0\\0&1&0&0\\-sin\alpha&0&cos\alpha&0\\0&0&0&1\end{pmatrix}⎝⎜⎜⎛​cosα0−sinα0​0100​sinα0cosα0​0001​⎠⎟⎟⎞​
  • 绕 Z 轴旋转
    Rz(α)R_z(\alpha)Rz​(α) = (cosα−sinα00sinαcosα0000100001)\begin{pmatrix}cos\alpha&-sin\alpha&0&0\\sin\alpha&cos\alpha&0&0\\0&0&1&0\\0&0&0&1\end{pmatrix}⎝⎜⎜⎛​cosαsinα00​−sinαcosα00​0010​0001​⎠⎟⎟⎞​

提示: R_y 中 −sinα-sin\alpha−sinα 而 R_x 和 R_z 中是 sinαsin\alphasinα 的原因是, Y 轴是由 Z 叉乘 X 得到的,而不是 X 叉乘 Z(右手定则).

3D 旋转(3D Rotation)

任意的 3D 旋转都可以表示为绕 X Y Z 轴旋转的组合,公式如下
Rxyz(α,β,γ)R_{xyz}(\alpha,\beta,\gamma)Rxyz​(α,β,γ) = Rx(α)Ry(β)Rz(γ)R_x(\alpha)R_y(\beta)R_z(\gamma)Rx​(α)Ry​(β)Rz​(γ)

什么是欧拉角

其中,α,β,γ\alpha, \beta, \gammaα,β,γ 分别代表绕 X Y Z 三个轴旋转的角度,叫做欧拉角 (pitch, yaw, roll)
pitch 是围绕 X 轴旋转,也叫做俯仰角
yaw 是围绕 Y 轴旋转,也叫偏航角
roll 是围绕 Z 轴旋转,也叫翻滚角

罗德里格斯旋转公式(Rodrigues’ Rotation Formula)

在这里插入图片描述

Viewing transformation

这里的 Viewing transformation 包括 View(视图)/Camera 变换和 Projection(投影) 变换

投影变换包括: 正交(Orthographic)投影和透视(Perspective)投影

什么是 View / Camera Transformation

思考怎么拍一张照片?

  1. 找到一个合适的地方并且排列好拍照的人 (模型变换 Model Transformation)
  2. 找到一个合适的拍照角度放置相机 (视图变换 View Transformation)
  3. 拍照 (投影变换 Projection Transformation)
    简称 MVP

怎么进行视图变换(View/Camera Transformation)?
首先定义相机的姿态(位置e⃗\vec{e}e,看的方向g^\hat{g}g^​,向上方向(up direction, t^\hat{t}t^))
在这里插入图片描述

相机标准位置(约定俗成)

相机的位置为原点(0, 0, 0), Y 轴向上,看向 -Z,物体随着相机变换
在这里插入图片描述
View Transformation 操作的是相机,其他物体跟着进行同样的变换

怎样将一个相机从一个任意的摆放,放到一个标准位置在这里插入图片描述

  • 将 e⃗\vec{e}e 平移到原点
  • 将 g^\hat{g}g^​ 旋转到 -Z
  • t^\hat{t}t^ 旋转到 Y
  • 旋转 (gxt)(g x t)(gxt) 到 X (注解: g 叉乘 t 得到 t⃗g⃗\vec{t} \vec{g}tg​ 坐标系的另一个轴)与 X 对应

使用数学方式表示相机到标准位置的变换

在这里插入图片描述
第一步,先做 e⃗\vec{e}e 到原点的平移,TviewT_{view}Tview​ 如图
第二部,因为计算从 g 到 -Z, t 到 Y, (g x t) 到 X 的旋转矩阵 RviewR_{view}Rview​ 比较困难,则先考虑 X 到 (g x t), Y 到 t, Z 到 -g,然后在求逆, 因为旋转矩阵就是一个正交矩阵,对求得旋转矩阵做一个转置,则可得到 g 到 -Z, t 到 Y, (g x t) 到 X 的旋转矩阵 RviewR_{view}Rview​

相机按照此变换矩阵进行变换之后,相机内的物体都需按照此矩阵进行同样的变换。

View/Camera Transformation 是为了 Projection Transformation 做准备

投影变换(Projection Transformation)

前面说到投影变换分为正交投影(Orthographic Projection) 和透视投影(Perspective Projection)
在这里插入图片描述

正交投影和透视投影的区别

正交投影, 不会给人带来近大远小的视觉(错觉),通常用在工程制图方面。
透视投影, 会给人带来近大远小的视觉(错觉)
在这里插入图片描述

正交投影

正交投影简单的理解/做法:

  1. 将相机放置在原点,看向 -Z,Y 是向上方向
  2. 那么如果直接将 Z 坐标直接扔掉,就可很方便的得到一个(x, y)二维平面的图形。
  3. 之后在将其平移和缩放到一个 [-1, 1] 的矩形内。
    在这里插入图片描述
    通常的做法:
    将一个立方体的 [左(left), 右(right)] x [下(bottom), 上(top)] x [远(fast), 近(near)] 映射到一个 canonical 的立方体上[−1,1]3[-1, 1]^3[−1,1]3
    在这里插入图片描述
    通常的做法与简单的做法的区别:
  • 通过平移将立方体居中
  • 通过缩放将立方体变为 “canonical” 立方体

此种情况下,对于 X 和 Y 都是 l, b 在 X, Y 轴的负半轴,r 和 t 在 X, Y 轴的正半轴, 则都是 r > l, t > b。而 f 在 Z 的负半轴(Camera 看向 -Z),n 在 Z 的正半轴,所以当立方体距离相机近的 n 的值是大于距离相机远的 f(正常应该是距离越远,值越大)。这也是 OpenGL 为什么使用左手系的原因.

正交投影的变换矩阵

在这里插入图片描述
2r−l\frac{2}{r-l}r−l2​ 是将立方体的长度缩放到 [-1, 1] 的范围内,对于它的 Y 和 X 是同样的操作。
−r+l2-\frac{r+l}{2}−2r+l​ 是 X 轴的平移,对于它的 Y 和 X 是同样的操作

透视投影(Perspective Projection)

回顾一下齐次坐标的概念:
(x,y,z),(kx,ky,kz,k!=0),(xz,yz,z2,z!=0)(x, y, z), (kx, ky, kz, k != 0), (xz, yz, z^2, z != 0)(x,y,z),(kx,ky,kz,k!=0),(xz,yz,z2,z!=0) 都表示在 3D 空间中的同一个点 (x,y,z)(x, y, z)(x,y,z) 。
例如,(1,0,0,1)(1, 0, 0, 1)(1,0,0,1) 和 (2,0,0,2)(2, 0, 0, 2)(2,0,0,2) 都表示 (1,0,0)(1, 0, 0)(1,0,0)

怎样实现透视投影

  • 先将 Frustum 挤压称为一个长方体(n -> n, f -> f)(Mpersp−>orthoM_{persp->ortho}Mpersp−>ortho​)
  • 然后做正交投影
    在这里插入图片描述

计算透视投影的变换矩阵

在这里插入图片描述
与 y′y'y′ 类似的 x′=nzxx' = \frac{n}{z}xx′=zn​x
那么在齐次坐标系中就有:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...