MVP,全称是Model-View-Projection,是计算机拿到你的模型之后,把他呈现到你屏幕上进行的变换的必要流程,将局部空间变换到裁剪空间

  graph LR
	subgraph MVP变换
	    A["局部空间<br/>Local Space"]
	    A -->|"模型矩阵<br/>Model Matrix"| B["世界空间<br/>World Space"]
	    B -->|"视图矩阵<br/>View Matrix"| C["观察空间<br/>View Space"]
	    C -->|"投影矩阵<br/>Project Matrix"| D["裁剪空间<br/>Clip Space"]
	end
    D -->|"裁剪、透视除法<br/>(GPU自动处理)"| E["归一化设备坐标<br/>NDC"]
    E -->|"视口分辨率"| F["屏幕空间<br/>Screen Space"]

分步解析

-> 局部空间 Local Space

局部空间是物体自身的坐标系,描述物体顶点相对于其自身原点的坐标。

模型矩阵 Model Matrix

模型矩阵用于将物体的局部坐标系(模型空间)转换到世界坐标系(世界空间)。其本质是一个普通的变换矩阵,包含平移旋转缩放的功能。-> [变换矩阵 Transformation Marices](/posts/变换矩阵 Transformation Marices)

-> 世界空间 World Space

世界空间是场景的全局坐标系,所有物体的位置、方向和大小都相对于该空间的原点。

视图矩阵 View Matrix

视图矩阵用于将场景从世界坐标系(世界空间)转换到相机坐标系(观察空间)。 -> [视图矩阵 View Matrix](/posts/视图矩阵 View Matrix)

-> 观察空间 View Space

观察空间也称为 摄像机空间(Camera Space)或 眼空间(Eye Space),它将摄像机作为坐标系的原点,同时也包含摄像机的旋转信息。

投影矩阵 Project Matrix

投影矩阵用于将相机坐标系(视图空间)中的三维坐标转换为裁剪空间(Clip Space)的二维坐标,并模拟透视效果正交投影。 -> [投影矩阵 Project Matrix](/posts/投影矩阵 Project Matrix)

-> 裁剪空间 Clip Space

裁剪空间是MVP变换的最终结果,接下来交由GPU进行透视除法以得到NDC坐标。 -> [齐次裁剪空间 与 NDC](/posts/齐次裁剪空间 与 NDC)

MVP变换

$$ \text{gl\_Position} = \text{ProjectionMatrix} \times \text{ViewMatrix} \times \text{ModelMatrix} \times \text{VertexPosition} $$

版权声明

作者: Chaim

链接: https://chaim.eu.org/posts/mvp%E5%8F%98%E6%8D%A2/

许可证: CC BY-NC-SA 4.0

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Please attribute the source, use non-commercially, and maintain the same license.

开始搜索

输入关键词搜索文章内容

↑↓
ESC
⌘K 快捷键