跳转到主要内容
Computer Graphics Jul 22, 2022 3 tags

MVP矩阵

MVP矩阵

cover

(Vertex Shader) => (MVP矩阵)=> Clip Space => (透视除法) => NDC => (视口变换) => Screen Space => (Fragment Shader)

意义:

  • 将3D物体转化到2D平面;
  • 为各个空间的运用做准备。

什么是MVP矩阵?

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

4.6.4 模型空间(model space)

**模型空间(model space)**也被称为对象空间(object space)或局部空间(local space)

模型空间会跟着模型移动和旋转,可以理解为自己的”前后左右上下“

在Unity中模型空间使用的时左手坐标系,(所以对于某些用右手坐标系的建模软件导出模型时需要进行变换,通常是z轴反向)

一般模型坐标系的原点在模型的重心(在建模时定义)

例:奶牛鼻子在模型空间的坐标,(扩展到齐次坐标系下)如下图

我们可以在顶点着色器访问模型的顶点信息,其中就包含了每个顶点的模型空间坐标

4.6.5世界空间(world space)

**世界空间(world space)**在Unity中同样使用左手坐标系,但它的x,y,z轴固定不变,在Unity中,可以通过调节模型的Transform组件中的 **Postion(位置)、Rotation(旋转)、Scale(缩放) **来改变模型的参数。

Transform组件下的值是相对于 父级(Parent) 的Transform组件值为原值定义的;如果没有父级,则相对于世界坐标系的值,即Postion(0,0,0),Rotation(0,0,0),Scale(1,1,1)

模型变换:模型空间的顶点坐标 变换到 世界空间的顶点坐标

根据Transform组件下的3个参数值,能够得到模型空间相对于**世界空间(如果有父级,就是父级的模型空间)**的关系,再应用 4.5.7章节 的知识,求变换矩阵

例子:

(已知奶牛的鼻子在模型空间中的坐标

,以及Transform的值,求奶牛鼻子在世界空间的坐标\mathbf{p}_W)

解:1.求变换矩阵(注意从右往左计算顺序为:缩放、旋转、平移)

2.对模型顶点的坐标进行变换

解得奶牛鼻子的世界坐标是

,注意这里的浮点数都是近似值,这里近似到小数点后3位,这取决于Unity采用的浮点值精度

4.6.6 观察空间(view space)

**观察空间(view space)**也叫摄像机空间(camera space),观察空间可以理解为模型空间的特例,它的模型是摄像机

在观察中间中,摄像机位于坐标原点,在Unity中,观察空间区别于世界空间和物体空间,它是右手坐标系

+x轴指向(相机镜头)右方+y轴指向(相机镜头)上方+z轴指向相机****后方,即相机的正前方指向-z轴方向

(注:观察空间不是屏幕空间,观察空间是3维的,屏幕空间是2维的,从观察空间到屏幕空间需要进行投影变换)

观察变换:将顶点坐标从世界空间变换到观察空间

获得观察变换矩阵:

法一:计算观察空间的三个坐标轴在世界空间下的表示,根据4.6.2节的方法,观察空间变换到世界空间的变换矩阵

,再求逆矩阵得到

法二:将相机通过逆变换,让观察空间和世界空间重合,即让相机到原点,观察空间坐标轴与世界坐标轴重合,即直接求

例子:

已知奶牛的鼻子在世界空间中的坐标

,以及相机的Transform的值,求奶牛鼻子在观察空间的坐标

解(法二):

1.已知了相机的Transform值,构造逆变换矩阵(逆变换矩阵的顺序和原先相反,平移在最右边,即先平移到原点,再做旋转和缩放)

注意:因为观察空间使用的是****右手坐标系,所以在最前面的乘上矩阵

2.对顶点进行变换:

解得奶牛鼻子的观察空间坐标是

,

Related Articles

继续阅读