计算机图形学基础——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字母代表):

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

相关推荐
kalvin_y_liu5 小时前
四款主流深度相机在Python/C#开发中的典型案例及技术实现方案
开发语言·python·数码相机
格林威8 小时前
工业相机如何通过光度立体成像技术实现高效精准的2.5D缺陷检测
人工智能·深度学习·数码相机·yolo·计算机视觉
点灯小铭8 小时前
基于MATLAB的车牌识别系统
开发语言·单片机·数码相机·matlab·毕业设计·课程设计
格林威15 小时前
工业检测机器视觉为啥非用工业相机?普通相机差在哪?
人工智能·数码相机·yolo·计算机视觉·视觉检测·相机
格林威1 天前
机器视觉检测的光源基础知识及光源选型
人工智能·深度学习·数码相机·yolo·计算机视觉·视觉检测
Hi202402171 天前
使用 Apollo TransformWrapper 生成相机到各坐标系的变换矩阵
数码相机·线性代数·矩阵·自动驾驶·apollo
nenchoumi31191 天前
全网首发!Realsense 全新 D555 相机开箱记录与 D435i、L515、D456 横向测评!
数码相机·计算机视觉·机器人·ros·realsense
简单说鸭2 天前
ScanNet: Richly-annotated 3D Reconstructions of Indoor Scenes 数据集构建
数码相机
文弱_书生2 天前
关于对鱼眼相机图片进行畸变校正的两种思路
数码相机·鱼眼畸变校正·传统几何方法·深度学习方法
疾风铸境2 天前
qt+halcon开发相机拍照软件步骤
数码相机·qt·halcon·拍照