GAMES101-04- Transformation Cont

Transformation Cont

上节课补充

对于旋转操作,旋转角度为θ,则矩阵可以写为:

image-20220304202724894

那么旋转角度为-θ时,矩阵怎么表示呢?

答:由于cosθ=cosθ sinθ=sinθ,所以从式子变换可看出Rθ=RθT

image-20220304202813036

而从定义的角度可看出,Rθ=Rθ1

那么就可以得到一个有趣的关系,RθT=Rθ1,满足这样式子的矩阵也叫正交矩阵

3D transformation

3D变换的基本概况

三维的变换都可以用二维的变换来类比,那么三维也引入齐次坐标,那么其表示形式可以写为:

image-20220302215409512

同理,对点的定义操作如下:

image-20220302220201258

当然,写(x/w,y/w,z/w,1)也是对的,这样就是用四个数来表示三维空间的点。

那么三维空间也可以用4x4的矩阵来表示(仿射变换的情况下,矩阵的最后一行就是0,0,0,1):

image-20220302220446550

思考,在上式写成4x4矩阵形式的时候,是先考虑线性变换呢,还是先考虑平移呢?

答:同二维空间一样,是先线性变换再平移

3D变换的旋转表示

考虑三维空间下的旋转,分别是按x轴,y轴和z轴旋转α度,则对应的旋转矩阵如下:

image-20220306112142554

为什么Ry(α)的矩阵表示形式跟Rx(α)Rz(α)不一样呢?

答:观察可以看出,绕y轴的结果刚好跟绕x和z轴的方向是反的。因为绕y轴旋转的理解跟绕x和z轴旋转的理解不太一样。因为矩阵有旋转对称性,所以对于xyz坐标系来说,利用右手螺旋定理,x叉乘y得到z,y叉乘z得到x,而z叉乘x得到-y,这是跟y是反的,所以旋转矩阵的表示形式会跟绕x轴和绕z轴不太一样。

那么任意的复杂旋转都可以用简单的绕轴旋转来实现吗?

答:是的。式子Rxyz(αβγ)=Rx(α)Ry(β)Rz(γ)表示的意思就是任意的旋转都写成绕x,y,z轴的旋转的组合。(α,β,γ在数学上被称为欧拉角

旋转转换为绕轴旋转的方程式(罗德古斯旋转方程式)表示如下:

image-20220306160257728

这个公式在干什么呢?

答:它给了我们一个定义旋转轴为向量n的旋转矩阵,但直接这样定义并不严谨,毕竟向量要确定起点和方向才对,实际上这是默认了这个向量是过原点的,这样的话这个向量就是起点在原点,方向为n这个方向,旋转角度为α

Viewing观测 transformation

在介绍之前,先用拍照类比一下变换的过程:

  • 找到一个好地方,安排好拍照的人员和动作=model transformation
  • 找到一个好角度进行拍摄=view transformation
  • 按下快门=projection transformation

view视图 transformation

像前面说的,视图变换等同于在摆相机,那么相关重点就有position位置e、gaze direction看的角度g、up direction向上方向t

向上方向是什么呢?怎么理解呢?

答:假设在相机上插根竖直的草,不改变相机看的角度,左右扭转相机,那么此时相机上插着的草所指向的方向就是向上方向。

image-20220306164320399

Key observation

当用同样的方式移动相机和物体的时候(也就是,保证两者的相对位置时),得到的结果会是一样的。

image-20220306164807524

既然这样的话,我们就可以定义相机的位置永远不变,就定相机的标准位置就在原点,相机永远往-z的方向看,相机永远以y轴为向上方向。

image-20220306165016770

也可以用向量表示如下:

image-20220306165320458

为什么要这样定义呢?

答:这样做可以让操作简化。

数学表示

视图变换记作Mview,这个变换可以由先平移变换再旋转变换的操作表示为Mview=RviewTview

  • Tview表示平移变换,对上原点

image-20220306170245089

  • Rview表示做旋转变换

    我们希望g对应-z轴方向,t对应y轴方向,g×t对应x轴方向这样来调整,但是这样难以表示,所以反向思考,我们可以让x轴对应g×t方向,y轴对应t方向,z轴对应g方向,这样对应的旋转矩阵Rview1可以表示如下:

    image-20220306171025935

    这个时候用到笔记一开始的内容,旋转矩阵是正交矩阵,满足RθT=Rθ1,所以已知Rview1,那么Rview就可以用Rview=(RviewT)T=(Rview1)T得到。

projection投影 transformation

投影有几种方式,一是3D到2D的投影,二是正交投影,三是透视投影。这里主要讲后两种投影方式。

首先从下图区别后两种投影方式:

image-20220306173212646

左边这图,怎么看线都是平行的。而右边这图,线延长后会发现线会相交于某点。

那么这两个投影有什么本质区别呢?

答:正交投影不会带来近大远小的现象,而透视投影会带来近大远小的现象。

再举个例子,下图种透视投影的相机看作是一个点,而正交投影假设的就是相机离得无限远。

image-20220306183202664

orthographic正交projection
  • 定义一个长方体,其实就是定义各边对应三个轴的数值

    image-20220306184213647

  • 将长方体的中心对应原点

    image-20220306184224626

  • 进行缩放,从而把长方体转变为标准立方体

    image-20220306184235433

怎么做——变换矩阵

image-20220306184257267

r+l2t+b2n+f2是为了实现平移,对应原点。

2rl2tb2nf是为了实现缩放,使得各轴范围就是[-1,1]。

那么进行缩放处理后,物体会被拉伸吗?

答:会被拉伸,但是在所有变换结束后,还会进行视口变换,此时还会进行一次拉伸,所以此时缩放被拉伸不是什么问题。

perspective透视projection

透视投影带来的效果就是平行线不再平行。

review 齐次方程

image-20220306185327263

怎么做

透视投影是一个点延伸出来四棱锥,定义一个近和远,服从近大远小的规则。

image-20220306220728963

对透视投影的处理分为两步:

  • 将frustum压缩为cuboid(Mpersportho)

也就是考虑把后面的投影面在平面内向里进行压缩,压缩成跟前一个面一样大小。(规定近平面不发生变化且远平面的中心点也不发生变化

怎么压缩远平面呢?

答:

第一步——考虑学过的知识,找到下图中点(x,y,z)与点(x,y,z)的关系,即对y挤压有y=nzy的关系,同理,对x挤压有x=nzx的关系。

image-20220306221413268

也就是说,对于变换过程的齐次方程来说,肯定存在一个矩阵Mpersportho,使得该矩阵左乘以下图左侧的(x,y,z,1)T必然得到(nx/z,ny/z,unknown,1)T,再对该矩阵处理得到nx,ny,still unknown,z)T

即,(x,y,z,1)T必然可以映射到右边这个向量nx,ny,still unknown,z)T

image-20220306222244722

Mpersportho左乘(x,y,z,1)T的式子可写为:

image-20220306222608321

因此,我们可以写出部分的Mpersportho如下满足上面映射关系:

image-20220306222552785

第二步——结合条件1(近平面点不变),假设z为n,那么得到下图式子:
image-20220306223036540

此时就可以考虑特殊情况,Mpersportho的第三行设为(0 0 A B)左乘(x,y,z,1)T会得到n2,即:

为什么第三行设为(0 0 A B)呢?

答:因为等号右侧的矩阵第三行为n2不包含xy(也就是跟xy无关),所以第三行的前两列都要设为0,而后两列说不准,所以只能将第三行设为(0 0 A B)

image-20220306223353976

此时得到一个方程,An+B=n2

第三步——考虑条件2(远平面z不变),此处特别考虑远平面的中心点(0,0,f,1),那么这个点的映射关系如下:
image-20220306224005564

此时也得到一个方程,Af+B=f2

结合第二步和第三步的方程式,我们可以解得A=n+fB=nf

最终得到完整的Mpersportho

在这节课的最后提出一个问题,Frustum中n和f处的z是不变的,那么考虑在n和f之间的某个z’的截面在远平面进行压缩时z‘是否会改变?(而这个n和f其实是往-z轴方向看的,所以要注意——n其实是大于f的)

  • 做正交投影(Mortho)

由于正交投影,上方已经解出,所以这部分就不再记录了。

posted @   L-Yeeky  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示