技美 百人计划_1.2.3MVP矩阵
1.2.3MVP矩阵1.2.2矩阵
什么是MVP矩阵
MVP矩阵分别是模型(Model),观察(View),投影(Projection)三个矩阵。我们的顶点坐标起始于局部空间(Local Space),在这里它称为局部坐标,它在之后会变为世界坐标(World Coordinate),观察坐标(View Coordinate),裁剪坐标(Clip Coordinate),并最后以屏幕坐标(Screen Coordinate)的形式结束
M 矩阵 模型空间——》世界空间
模型空间是以自身为原点的空间坐标系 世界空间是以世界中心为原点的坐标系
在不同的建模软件或者游戏引擎中使用的坐标系是不一样的,比如OpenGl使用的右手坐标系,DirectX使用的是左手坐标系,两种坐标系的区分方法是,正x轴指向右面正y轴指向上面,通过延正邪x轴方向到正y轴方向握拳大拇指的指向就是相应坐标系的正z轴方向,在握拳的过程中,如果是顺时针方向就是左手坐标系,如果是逆时针方向就是右手坐标系,在Unity中使用的左手坐标系。
从模型空间到世界空间是怎么变换的:
(顺序不能改变(矩阵乘法不满足乘法交换律))
M
=
[
1
0
0
t
x
0
1
0
t
y
0
0
1
t
z
0
0
0
1
]
[
c
o
s
θ
0
s
i
n
θ
0
0
1
0
0
?
s
i
n
θ
0
c
o
s
θ
0
0
0
0
1
]
[
k
x
0
0
0
0
k
y
0
0
0
0
k
z
0
0
0
0
1
]
M= \begin{bmatrix} 1&0&0&t_x\\ 0&1&0&t_y\\ 0&0&1&t_z\\ 0&0&0&1 \end{bmatrix} \begin{bmatrix} cos\theta &0&sin\theta&0\\ 0&1&0&0\\ -sin\theta&0&cos\theta&0\\ 0&0&0&1 \end{bmatrix} \begin{bmatrix} k_x&0&0&0\\ 0&k_y&0&0\\ 0&0&k_z&0\\ 0&0&0&1 \end{bmatrix}
M=?????1000?0100?0010?tx?ty?tz?1???????????cosθ0?sinθ0?0100?sinθ0cosθ0?0001???????????kx?000?0ky?00?00kz?0?0001??????
V矩阵 世界空间->视觉空间
视觉空间就是以摄像机为空间的坐标系
将摄像机坐标系原点移动到世界坐标系原点
V
=
[
1
0
0
0
0
c
o
s
θ
?
s
i
n
θ
0
0
s
i
n
θ
c
o
s
θ
0
0
0
0
1
]
[
1
0
0
t
x
0
1
0
t
y
0
0
1
t
z
0
0
0
1
]
V= \begin{bmatrix} 1&0&0&0\\ 0&cos\theta&-sin\theta&0\\ 0&sin\theta&cos\theta&0\\ 0&0&0&1 \end{bmatrix} \begin{bmatrix} 1&0&0&t_x\\ 0&1&0&t_y\\ 0&0&1&t_z\\ 0&0&0&1 \end{bmatrix}
V=?????1000?0cosθsinθ0?0?sinθcosθ0?0001???????????1000?0100?0010?tx?ty?tz?1??????
P矩阵 视觉空间——》裁剪空间
- 不是真正的投影,为投影做准备
- 目的:判断顶点是否在可见范围内
- p矩阵:对x,y,z分量进行缩放,用w分量做范围值。如果x,y,z都在W范围内,那么该点在裁剪空间内
两种投影:透视投影(近大远小) 正交投影(没有近大远小多用于2D游戏)对应不同的P矩阵
P矩阵推导
世界空间的应用
大致可以听明白什么意思。但是语法不熟悉
视觉空间的应用
大致可以听明白什么意思。但是语法不熟悉
小作业
模型空间,世界空间,观察空间的区别
模型空间: 模型空间是和某个对象某个物体相关的,也被成为对象空间,局部空间,是基于物体(对象)自身为原点。 世界空间 世界空间是一个特殊的坐标系,它是以世界(概念)为原点,Unity中的世界坐标都是基于世界空间的坐标 观察空间 观察空间在投影之前为投影做准备,观察那些像素符合要求保留那些不符合需要丢弃裁剪掉(由投影模式决定),和其他操作(Unity需要对z轴取反)最后得到可以用来投影的数据。 这里看其他人的: 【最大的区别在于在观察空间中我们使用的是右手坐标系,而这个是符合OpenGL的,在观察空间中我们需要把世界空间的顶点转换到观察空间,为此我们需要求的观察空间的变换矩阵,因为坐标系的不同,所以我们需要对z轴取反,并求得逆变换, 在观察空间还有一项就是需要将观察空间的顶点转换到裁剪空间(也被称为齐次裁剪空间),这个用于变换的矩阵叫做裁剪矩阵,也被称为投影矩阵,在观察空间中并不是真正的投影,而是准备投影的数据,即那些顶点需要保留,那些需要剔除,这是由投影方式决定的】
|