计算机图形学基础——MVP变换

前言

  基于GAMES101——闫令琪老师的视频为基础,整理,总结而来。感谢闫老师带来如此好的一份教学,视频链接:https://www.bilibili.com/video/BV1X7411F744

正文

MVP变换不是我们打游戏里面的那个mvp哦,而是model(模型),view(视图),projection(投影)。我们可以类比相机拍照过程:首先,要人站定位置(模型),然后相机摆好位置(视图),最后按下快门键(投影)。下面我们分别介绍视图变换及投影变换。

视图变换

首先规定下列变量:

我们视图变换的目的主要是为了将相机放在默认的位置上——(0,0,0)点,头顶方向为Y轴,面对方向为-Z。

要将一个随意位置的相机放到该位置上,我们的想法是:先移动后旋转。于是可以写出下面的式子:👇

T矩阵

T矩阵就是移动矩阵,这个我们比较好想:当前的位置是e(x,y,z)点,那么我们就先不旋转,只移动-x,-y,-z就可以回到原点。

R矩阵

R矩阵就是Roatation——旋转矩阵,这个矩阵我们要怎么求出呢?

从原本角度旋转到默认角度很难,我们不妨可以想一想从默认角度旋转到原本角度,求得的矩阵R‘后,根据正交矩阵的逆就是其转置的性质,来通过求R’的逆便可以求得,这里我们就直接贴出来式子:

矩阵的乘法是从右往左运算的,先将相机移动原点上面去,然后再考虑旋转,然后旋转不好直接推,那么就推从原点旋转到那些角度的矩阵,然后再逆变换就可以了。

我们相机变换了,为了看起来不变,根据相对运动,我们的模型变换也要乘上这个矩阵来相应地作出变换,所以经常有模型视图变换这个说法

相机摆好,人摆好后,我们就需要三维到二维的一个投影。

投影变换

投影分为两种投影:正交投影和透视投影。

正交投影与透视投影的最明显区别为:正交投影没有近大远小现象,透视投影有。

正交投影

正交变换是为了将所有物体都放在-1到1的三次方这个可视立方体(剪切空间)中,让三维物体可以映射到平面中去。这样子移动后,还有一个视口变换,最后形成一个正交投影的图像。

将一个模型的最左、右、下、上、前、后的值都取得,以下图变量命名。

透视投影

  上图中有两个面,一个是near——n面,即为靠摄像头较近的那一面,far——f面,距离摄像头较远的那一面,我们的目的就是将f面都投影到n面上。

  要做到将f面投影到n面,我们需要经历两件事:1、将四边挤压到和n面一样xy,看作远平面上的四个点,挤成和近平面一个高度 ;2、正交投影到n面上。我们的挤压,要遵循一个规定:近平面永远不变,远平面经过挤压后,中心点不变。

上面的M矩阵,是从透视到正交的一个矩阵,目的是将f面上的点来乘以这个矩阵后,可以投影到n面上。

要做到求出这样子的矩阵,我们先想象:从侧面看上图中左边的台体

根据上图,我们已知的是n值,要求其近平面上的点,可以根据相似三角形的性质,n/z的比例不变,知道求近平面上的值x’,y‘,但由于z的值是变化的,所以在这里我们暂时无法表示z值,下图中先用unknown表示👇

于是我们便可以得到下面的式子👇

可以根据上面,推出M矩阵为下面的形式:

可是目前该矩阵的第三行还是不知道如何表示,但,我们有两个已知的条件:

  1. 在近平面下,任一点乘以M矩阵的值都不变;
  2. 在远平面上,有一个点,中心点(0,0,f)不变

根据在近的平面下,任意点不变的性质:

上面图中的意思是,原本左边是我们之前进度得出来的结论,因为近平面上的任意点都不变,所以我们将z的值代入n,将其变为n面上的点。

由于乘以M矩阵变化后不变,我们可以把M矩阵先去掉,如何将上面的(x,y,n,1)乘以一个n,和等号右边对应:

也就是说,我们由此知道M矩阵的第三行乘以(x,y,n,1)=n的平方

根据上图,得式子①:

根据远平面上,中心点(0,0,f)不变 性质:

最后得式子②:

根据式子①②,我们可以求的A和B的值:

最后得到透视矩阵结果(也就是M矩阵,下图中用P字母代表):

这样便可以通过乘以上面的矩阵来求得经过透视投影后的点位置。

  • 17
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值