百人计划(图形部分)MVP矩阵

MAY的百人计划https://space.bilibili.com/7398208?

1.2.3 MVP矩阵计算 · 语雀//PPThttps://docs.qq.com/sl...https://www.yuque.com/sugelameiyoudi-jadcc/okgm7e/5fc827aa948883c2d45c2088354bd933#WCJde

 OS = 模型原点为坐标系原点的空间坐标系 = 模型空间
WS = 世界空间为坐标原点的空间坐标系 = 世界空间
VS = 摄像机为坐标系原点的空间坐标系 = 视觉空间
CS = 裁剪空间 确定像素是否位于可见范围内
SS = 屏幕空间 显示平面 根据平台不同 坐标原点不同 分别位于左下或者左上 OPENGL屏幕坐标系原点在左下角向上向右增加,D3D屏幕坐标系原点在左上角向下向右增加。
WS = OS * M矩阵
VS = WS * V矩阵
CS = VS * P矩阵
CS得到的坐标经过齐次除法(透视除法)和映射输出 得到SS的二维坐标 (一般unity自动在底层进行 所以我们只要得到裁剪空间内的坐标即可)

注:五个空间中 只有观察空间(VS)是右手坐标系 剩余 都是左手坐标系

 MVP矩阵代表什么

 M矩阵

模型空间是以自身中心为原点的空间坐标系

世界空间是以世界中心为原点的空间坐标系

     如上图的小车在3Dmax里的坐标系为模型坐标系,在U3D里则是以世界坐标系为基准,从3Dmax里的(1,1,1)变成U3D的(-1,1,3),我们通过M矩阵进行变换。

依次进行了:缩放→旋转→平移(顺序不能改变)从右往左计算,得到世界空间下的顶点坐标。

V矩阵

 视觉空间:以摄像机为原点的坐标系

       平移整个观察空间,让摄像机的原点处于世界坐标的原点且令坐标轴和世界空间重合,再对z轴分量取反。

  • 平移
  • 旋转
  • 对Z轴取反(因为世界空间坐标系是左手坐标系,而视觉空间的坐标系是右手坐标系,所以我们需要对Z分量进行取反)

 P矩阵

P矩阵的目的 

image.png

       判断顶点是否在可见范围内,若在可见范围内即渲染出来,若不在范围内则将该顶点剔除掉,对于裁剪的图形,在裁剪的位置生成新的顶点来代替。

透视投影

 透视投影(左图):符合我们人眼视觉的投影,即近大远小。(常用于3D游戏)

 Near代表相机的最近距离(也就是近裁范围),Far代表相机能看到最远距离(也就是远裁范围)FOV为相机的可视距离nearClipPlaneHeight代表相机视野梯形中的上底边,farClipPlaneHeight则是对应下底边,Aspect是屏幕纵横比(16:9,5:4什么的),最后算的P矩阵(固定的公式)如左上。用视觉空间的点的坐标乘P矩阵得到裁剪空间下的点坐标,然后再比较xyz与w范围值的关系,判断该点是否在视锥体内可见

 正交投影

 

 MVP矩阵的应用

世界空间的应用

  • 模型空间下。用M矩阵把模型空间的顶点转换到世界空间
  • 世界空间的顶点坐标当作uv进行采样

视觉空间的应用

  • 根据向着camera的z坐标的大小(云和camera的距离)来控制云朵的显隐
  • 得到视觉空间的顶点坐标
  • 在片元着色器中根据z坐标的值,用数学公式调整云的显隐

P矩阵的推导

按GAMES101的推导方法知乎 - 安全中心https://link.zhihu.com/?target=https%3A//www.bilibili.com/video/BV1X7411F744%3Fp%3D4

 正交投影矩阵

用[l,r][b,t][f,n]描述空间中的立方体映射到一个标准正规的立方体

先把立方体中心移到原点,把XYZ分别拉成[-1,1]

缩放系数为2/(r-l),正交投影矩阵Mortho = Mscale*Mtranslate。OpenGL是右手系

 透视投影矩阵

1.把视锥体远平面压缩成长方体

2.使用正交投影矩阵就可以变换到正方体中

我们规定三个原则

1.近平面的所有点坐标不变

2.远平面的所有点坐标z值不变 都是f

3.远平面的中心点坐标值不变 为(0,0,f)

 根据相似三角形可得

作业推导P矩阵

字丑见谅呜呜  

补一个101推导方法的链接 [图形学笔记]推导投影矩阵 - 知乎

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值