导读

本节主要总结MVP变换(Model-View-Projection),来说明三维空间中的物体是如何映射到二维屏幕上的。

知识点

  • View/Camera Transformation(视图/相机变换)

  • Projection Transformation(投影变换)

    • Orthographics projection(正交投影)
    • Persperctive projection(透视投影)
  • ViewPort Transformation(视口变换)

一、View/Camera Transformation(视图/相机变换)

1.1、什么是视图变换?
视图变换顾名思义就是把你所看到的图变换,举个简单的例子,打比方在日常生活中你去拍照,你首先会取景,然后把你想拍的东西都摆放好,这一步叫做model transformation(模型变换)。接下来你肯定会挑选一个特定的角度摆放你的摄像机,这一步就叫做view transformation(视图变换)。然后按下快门后把图片拍下来,这一步就叫做projection transformation(投影变换)

1.2、怎样做视图变换?
了解了什么是视图变换,接下来就是怎么去做,做投影变换的前提是场景中得有一台摄像机,然后简单的给出几个物体。首先我们需要定义摄像机看向的方向为g(向量),然后取摄像机的向上方向为t(向量),再定义摄像机的位置position。

此时一个简单的场景就搭好了,现在我们需要做视图变换,一般在图形学中摄像机永远是看向-z方向,摄像机上边在y方向,所以需要将图示的摄像机变换到标准位置,但是这会出现一个问题,摄像机的位置一变,我们之前定义的gt向量都会变换,这不是我们想看到的。

根据相对运动可知,如果所有物体和摄像机的位置一起改变一样的位置,那么摄像机看的画面就不会变。(比如你在中国的摄影棚拍照和在美国的摄影棚拍照,如果摄影棚的装饰完全一样,你所拍到的画面是没有区别的)


所以接下来就是写出视图变换矩阵了,但是此时我们又陷入了麻烦,将一个任意位置,任意方向的相机和物体,变换到标准位置(看向-z轴,顶部在y轴)是很困难去写这样的视图变换矩阵的。
常规做法:

  • 先平移到原点
  • 再将g旋转到-z
  • 再将t旋转到y
  • 再将g×t旋转到x

上述常规做法的变换矩阵是非常难写的,所以可用线性代数中的逆这一知识点简化写法。

简化做法:

  • 平移到原点
  • 由任意位置转换到标准位置改成由标准位置转化为任意位置
  • 将求出的矩阵求逆矩阵

这样就简化了视图变换矩阵的求法,因为由任意位置转换到标准位置的矩阵是非常容易写的。

平移矩阵

旋转矩阵

然后求该矩阵的逆

因为旋转矩阵是正交矩阵,所以求矩阵的逆就相当于求该矩阵的转置。

所以求得变换矩阵为

二、Projection Transformation(投影变换)

投影变换分为透视投影和正交投影,这两种投影的功能都是将3维空间的物体映射到二维空间。

1、正交投影(Orthographic Projection)

1.1、什么是正交投影?
正交投影就是摄像机在原点,看向-z方向,顶部在y方向,在看向物体时将所有物体的z值归0,然后将物体平移并缩放到[-1,1]^2之间。

1.2、怎么做正交投影?
正交投影的做法就是把物体移到原点处的 [-1,1]^3 的标准立方体中。

步骤分为两步:
① 先将物体中心平移到原点。
②再进行缩放,缩放到[-1,1]^3 的标准立方体中。

这两个变换矩阵很好写出


解释:平移矩阵中的这三个平移量得出的原因是因为要将中心平移到原点,所以要取每个轴的中心坐标,平移量为负的原因是将任意一个点平移到原点都是负的平移量。


解释:缩放矩阵中的这三个缩放量得出的原因是用的[-1,1]的标准长度除以物体的每个轴所对应的长度,得到的缩放量。

小提示:由于看向的是-z方向,所以近平面n要比远平面f大。

2、透视投影(Perspective Projection)

2.1、什么是透视投影?
简而言之,透视投影就是近大远小,平行线也会变得不平行,人们眼睛所看到的就是透视投影的结果。

2.2、怎么做透视投影?
常规法:硬性求解。此方法在各类图形学书中均有求解,在此暂不讨论。

由透视变换到正交解法:这种方法相对于复杂的常规解法要容易得多,下面我就说说具体的思路。

首先把透视投影“挤”成正交投影

然后再做正交投影

由于正交投影我们在上方已经解出,所以现在要做的就是如何写出“挤”这一步的变换矩阵。

首先观察下图

我们从截面观察各点的变化情况,由于远平面f要“挤”到和近平面一样大,所以可推导出图中远平面上的红点的y值会向下移动到y’这么高,所以由相似原理可写出

同理求得x的变化

在齐次坐标中可以将原来远平面上的(x,y,z,1)的点写为:

为什么乘以z值之后得到的结果还相同?
因为在齐次坐标中,各个维度乘以相同的值得到点和原来一样。

此时可写出以下式子

由于已经知道了三行的值,所以可以逆推出透视变正交矩阵的三行的值

这是简单的线性代数矩阵和矩阵相乘的结果。

现在问题就简化为了如何求解矩阵第三行的值。
由于任何在近平面上的点是不会变的。
任何在远平面的点的z值也不会变。

由以上两条结论可推导出
n:近平面

由于其他三行的值都已知,所以现在只用算第三行的值。又因为由近平面得出的第三行为n^2,所以可确定透视变正交矩阵第三行的前两维为0,所以可得:


应用矩阵乘法,对应位置相乘,得:

再由第二条已知条件,所有在远平面的点的z值不变,可得(f为远平面):

再和透视变正交矩阵的第三行相乘,得:

两个方程,两个未知量,可求得A与B的值

终于,所有求解工作完成,得到透视变正交矩阵


所以透视投影矩阵就等于正交投影矩阵乘以透视变正交矩阵

3、近平面的定义

 定义近平面需要用到两个量,分别是fov(Field of view)和Aspect ratio。fov是视角,这里又分为fovY和fovX,fovY是垂直视角,也就是从近平面的上边的中心和下边的中心分别连一条线到摄像机所成的角度,而fovX是水平视角。       Aspect ratio是宽高比,Aspect ratio = width/height。

三、ViewPort Transformation(视口变换)

1.1、什么是视口变换?
在我们做完投影变换后所有物体都映射在标准坐标系中,但是屏幕会有各种各样的分辨率,所以视口变换是为了将正常设备坐标映射到屏幕坐标。
1.2、怎么做视口变换?
假设屏幕的宽为width,高度为height,那么视口变换就是把[-1,1]^2的xy平面变到[0,width]x[0,height],这里为什么没有考虑z轴的变换是因为z轴在之后的其他地方有用。
根据上述可得出视口变换矩阵为:


图片来自虚幻五游戏引擎实测场景

本文所有内容均是博主学习闫令琪老师的现代计算机图形学课程的总结,如有不足之处欢迎评论区指导补充。

【3】现代计算机图形学(正交投影,透视投影,MVP变换)相关推荐

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

    参考链接: 线性变换 计算机图形学入门教程 视图变换 图形学随笔:MVP变换-视图变换 计算机图形学笔记-专栏 View/Camera Transformation视图变换 MVP变换: 我们知道我们 ...

  2. 图形学 Lecture 2 Transformation(变换)

    目录 二维变换 线性变换 缩放变换 反射变换 切变 旋转变换 总结:线性变换 齐次坐标 平移变换 仿射变换 逆变换 变换的组合 变换的分解 补充 三维空间的变换 齐次坐标(三维) 三维变换 缩放 平移 ...

  3. 图形学笔记(四)变换——三维变换(三维旋转与欧拉角)、MVP变换、视图变换、投影变换(正交投影与透视投影)

    图形学笔记(三)变换--缩放.镜像.切变 图形学笔记(五)光栅化--屏幕.像素.屏幕空间.视口变换.基础图元与三角形.采样.包围盒.锯齿或走样 文章目录 1 三维空间中的变换 1.1 三维空间中的齐次 ...

  4. 图形学games101课程回顾--变换矩阵和MVP变换

    前言 这个文档为笔者自用,纯属知识分享和讨论,杜绝商用,有问题欢迎大家指出. 一.计算机图形学? 计算机图形学就是应用计算机合成或生成虚拟信息.在当前生活中,有很多这方面的应用,比如动画<凡人修 ...

  5. 计算机图形学-正交投影与透视投影

    本专栏内容整理了GAMES101的计算机图形学课程的主要内容,作为我学习计算机图形学的一份复习备份或叫做笔记.内容中如有错误,或有其他建议,欢迎大家指出. 附上GAMES101计算机图形学课程:GAM ...

  6. 现代计算机图形学入门-L5-光栅化.1

    光栅化-- Rasterization 1 (Triangles) 做完MVP变换后(Viewing Transformation,MVP),无论是正交投影还是透视投影,所有物体都在标准的立方体中.下 ...

  7. 计算机图形学笔记(观测变换、模型变换、视图变换、投影变换、视口变换)

    计算机图形学笔记(观测变换.模型变换.视图变换.投影变换.视口变换) 目录 计算机图形学笔记(观测变换.模型变换.视图变换.投影变换.视口变换) 一.简介 1.模型变换(Model transform ...

  8. 图形学知识基础:变换与矩阵的关系,齐次坐标

    何为变换 首先是两个参考视频: 视频1:现代计算机图形学入门-闫令琪(第三章:变换的介绍) 视频2:线性代数的本质 - 03 - 矩阵与线性变换 在生活中,或者说在我们开发游戏的时候,会碰见很多很多的 ...

  9. 理解计算机3D图形学中的坐标系变换

    要谈坐标系变换,那么坐标系有哪些呢?依次有:物体坐标系,世界坐标系,相机坐标系,投影坐标系以及屏幕坐标系.我要讨论的就是这些坐标系间的转换.      这些坐标系不是凭空而来,他们都是为了完成计算机3 ...

最新文章

  1. 我的理解:box-sizing
  2. 2021-10-06
  3. 使用athens部署企业内部Gitlab go mod包的Go私服代理
  4. Linux / Server 端收到 SIGPIPE 信号的原因
  5. Got a packet bigger than 'max_allowed_packet' bytes
  6. case when影响性能吗_字段为NULL会影响查询性能吗?
  7. 牛客网【每日一题】7月31日题目精讲—兔子的区间密码
  8. qt的一些参数配置 win和linux
  9. 黑帽SEO必须掌握的四种暗链代码
  10. javaweb汽车租赁系统
  11. Qt 利用海康摄像头的ISAPI协议进行抓图等操作
  12. 【JAVA操作系统——可变式分区分配】首次适应算法
  13. 读Google MapReduce后有感
  14. 计算机二级考试应用与分值,计算机二级考试题型及分值
  15. 基于itchat获取微信好友头像
  16. MCP2515 (2)
  17. ppt如何删除所有特效?
  18. storm部署安装deploy
  19. 理论物理极础4:质点系
  20. 腾讯云服务器申请SSL证书, 配置Nginx, 实现HTTPS

热门文章

  1. nand flash基础——读写擦操作
  2. 【自定义Matlab函数】利用Kronecker积求解矩阵方程AXB=D
  3. C# 切换中英文输入法
  4. 2016 年度开源中国新增开源软件排行榜 TOP 100
  5. 自动驾驶(十一)---------泰勒展开式、雅克比矩阵、主成分分析
  6. 计算机桌面没有打字,电脑输入法不见了怎么办
  7. Veritas Flex 5150 实例管理-NetBackup实例创建
  8. asp.net控件,服务器标记的格式不正确问题解决方法
  9. b站python弹幕签到_B站弹幕实时效果python
  10. win8dnf计算机内存不足,Win8电脑内存不足解决方法介绍