百人计划学习 图形 1.2.3 MVP矩阵运算

本文深入讲解了MVP矩阵的概念及应用,包括模型矩阵、观察矩阵和投影矩阵的推导过程,以及它们在游戏开发中如何将顶点从局部空间变换到屏幕空间的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是个人学习笔记,有错欢迎指出
学习链接:

MVP矩阵

MVP矩阵分别是模型(Model)、观察(View)、投影(Projection)三个矩阵
顶点坐标起始于局部空间(Local Space),在这里它称为局部坐标(Local Coordinate)
它在之后会变为世界坐标(World Coordinate),观察坐标(View Coordinate),裁剪坐标(Clip Coordinate),并最后以屏幕坐标(Screen Coordinate)的形式结束

在这里插入图片描述

1.局部坐标系

局部坐标是对象相对于局部原点的坐标,也是物体起始的坐标

2.世界空间

是指顶点相对于(游戏)世界的坐标。

如下图:在左边的图当中,该点的局部坐标是(1,1,1),在世界坐标轴下,该点的坐标是(-1,1,3)
Model Matrix(模型矩阵)的变换就是物体的坐标将会从局部变换到世界空间

在这里插入图片描述

Unity:左手坐标系

3.模型矩阵推导

缩放、旋转、平移三部分顺序不能调整
在这里插入图片描述
矩阵从左至右是:平移、旋转、缩放,最先应用在顶点变换的是最右的缩放矩阵
在这里插入图片描述

4.观察空间

将世界空间坐标转化为用户视野前方的坐标而产生的结果。因此观察空间就是从摄像机的视角所观察到的空间。(以摄像机为原点的坐标系)

5.View Matrix:观察矩阵(View Matrix)

求解的方法:让观察空间的坐标系移到世界空间的坐标系
Games101:Find a good angle to put the camera;
原因:将相机放在世界坐标的原点,以y轴为向上方向,往-z方向看,并且其它物体跟随相机移动,比较方便!

在这里插入图片描述
在这里插入图片描述

View Matrix推导:
  • 先将相机的点平移到原点, T v i e w T_{view} Tview
  • 计算 R v i e w R_{view} Rview(将摄像机的坐标轴旋转到世界坐标轴上)的思路是:
  • 如果将g轴旋转到(0,0,1)是不方便的,但是!!,如果将(0,0,1)旋转到g轴就非常方便!所以我们首先得出的是 R v i e w − 1 R^{-1}_{view} Rview1,(前置知识:旋转矩阵是正交矩阵),因此 R v i e w − 1 = R v i e w T R^{-1}_{view} = R^{T}_{view} Rview1=RviewT ,得到 R v i e w = ( R v i e w − 1 ) T R_{view} = (R^{-1}_{view})^{T} Rview=(Rview1)T
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

6.裁剪空间

裁剪空间(Clip Space):在一个顶点着色器运行的最后,OpenGL期望所有的坐标都能落在一个特定的范围内,且任何在这个范围之外的点都应该被裁剪掉(Clipped)。被裁剪掉的坐标就会被忽略,所以剩下的坐标就将变为屏幕上可见的片段。

7.投影矩阵(Projection Matrix)

创建的观察箱(Viewing Box)被称为平截头体(Frustum)

1.不是真正的投影,为投影做准备。
2.目的:判断顶点是否在可见范围内
3.P矩阵:对x,y,z分量进行缩放,用w分量做范围值。如果x,y,z都在w范围内,那么该点在裁剪空间内。

4.Projection matrix:它指定了一个范围的坐标,比如在每个维度上的-1000到1000。投影矩阵接着会将在这个指定的范围内的坐标变换为标准化设备坐标的范围(-1.0, 1.0)。所有在范围外的坐标不会被映射到在-1.0到1.0的范围之间,所以会被裁剪掉。

  • Orthographic projection(正交投影)
  • Perspective projecttion(透视投影,近大远小)

在这里插入图片描述

7.1 正交投影

扔掉z后,如何区分前后?

简单想法:
在这里插入图片描述
正式的做法:

思想:
在这里插入图片描述

在这里插入图片描述

  • 首先将中心移到原点上,再缩放(变换到-1~1,所以先除本身的长度再*2)
    在这里插入图片描述
7.2 透视投影

前置知识:
在这里插入图片描述

第一步:将Frutum转换成Cuboid,也就是求 M p e r s p − > o r t h o M_{persp->ortho} Mpersp>ortho
在这里插入图片描述
由相似三角形可得:
在这里插入图片描述
得到其次坐标:
在这里插入图片描述
条件
在这里插入图片描述
在这里插入图片描述

第二步:做正交投影

8.视口变换

在这里插入图片描述

OpenGL会使用glViewPort内部的参数来将标准化设备坐标映射到屏幕坐标,每个坐标都关联了一个屏幕上的点

1.fovY:field of view
2. aspect ratio = width / height
在这里插入图片描述
在这里插入图片描述

任务(总结)

1.模型空间、世界空间、视野空间的区别
模型空间:局部坐标是对象相对于局部原点的坐标,也是物体起始的坐标
指顶点相对于(游戏)世界的坐标。
观察空间:从摄像机的视角所观察到的空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值