图形 1.2.3 MVP矩阵运算

参考视频:图形 1.2.3 MVP矩阵运算
GAME101 P4
参考书籍:《unity shader入门精要》
各个空间
MVP矩阵分别是模型(Model)、观察(View)、投影(Projection)矩阵

模型矩阵

作用:将物体从模型空间→世界空间
推导:把物体从模型空间转换到世界空间,需要先缩放后旋转后平移,注意这里的旋转顺序是不能交换的
模型矩阵

观察矩阵

作用:将物体从世界空间→观察空间
推导:想象移动整个观察空间,让摄像机的原点位于世界坐标的原点,坐标系与世界坐标系重合

对摄像机的观察空间先平移后旋转
在这里插入图片描述
最后Z轴取反(因为观察空间是右手坐标系,在unity中左手与右手的区别是Z轴相反,相当于左乘下面第二个图的矩阵)
在这里插入图片描述
将以上矩阵合并得到的即是观察矩阵(原视频中并未给出Z轴取反的矩阵)

投影矩阵

作用:将物体从观察空间→裁剪空间
裁剪空间是个概念性的空间,目的是方便对渲染图元进行裁剪。
(裁剪空间根据以下规则可以很方便的剔除渲染图元)
在这里插入图片描述
裁剪空间由视锥体决定,而视锥体分为正交投影和透视投影
在这里插入图片描述

推导:
正交
在这里插入图片描述
相当于对矩形视锥体先平移后缩放(缩放相当于把区间从l到r映射到-1到1,y和z轴同理)
在这里插入图片描述
因为视图空间再unity中是右手坐标系,裁剪空间是左手坐标系,因此还应将Z轴取反(下述的投影矩阵一样,不再赘述)

透视
在这里插入图片描述
透视矩阵相当于先把视锥体压缩成长方体,再采用跟正交矩阵一样的变换
如何压缩?
先作如下规定
1.挤压后近平面4个点不变
2.远平面压缩时Z值不发生变化
给定一个点(x,y,z),从Y轴角度看想把Y挤压到跟近平面y’一个大小,则根据相似三角形可以得到y’=ny/z,同理x’=nx/z
在这里插入图片描述
也就是说(x,y,z,1)经过挤压会变成(nx/z,ny/z,unknown,1)(只是规定近平面盒远平面的Z值不变,中间的点的Z值无法确定)在同乘上Z(齐次坐标同乘上一个值仍然表示同一个点)得到(nx,ny,unknown,z)在这里插入图片描述
因此我们已经能推出矩阵的第一二四行
在这里插入图片描述
而根据之前的规定第一条近平面(也就是Z=n的点)在挤压后不发生变化,换句话说矩阵的第三行乘上点(x,y,n,1)后Z轴仍然不变,因此第三行应该是形如(0,0,A,B)的形式(因为要得到的结果n^2与X,Y没有关系,所以前两个元素是0)
在这里插入图片描述
在根据规定的第二条,远平面上的点Z值不变,取中心点(0,0,f,1)可以得到类似的式子
在这里插入图片描述
解放程得到A和B
在这里插入图片描述
因此投影变成正交的压缩矩阵和最终的透视投影矩阵如下(unity还要对Z轴取反)
在这里插入图片描述

世界空间的应用在这里插入图片描述
视觉空间的应用
在这里插入图片描述

作业:模型空间、世界空间、视野空间的区别

模型空间是以物体自身中心点为原点的空间,每个物体都有自己的模型空间,坐标系会随着物体的移动而移动
世界空间是描述物体在全局空间的绝对位置
视野空间相当于摄像机的模型空间,在unity中视野空间为右手坐标系,其余空间均为左右坐标系
模型空间与世界空间的区别:模型空间相当于我们平时交流讲某某某在我们前面100米处,这个距离会随着我们的移动而变化,而世界空间则相当于经纬度坐标,描述的是一个“绝对”的位置。

P矩阵的推导

见上文P矩阵的介绍

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值