这是个人学习笔记,有错欢迎指出
学习链接:
- 冯乐乐 《UnityShader入门精要》
- 【技术美术百人计划】图形 1.2.3 MVP矩阵运算
- Learn Opengl 坐标系统
- Games101 Lecture04 变换
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}
Rview−1,(前置知识:旋转矩阵是正交矩阵),因此
R
v
i
e
w
−
1
=
R
v
i
e
w
T
R^{-1}_{view} = R^{T}_{view}
Rview−1=RviewT ,得到
R
v
i
e
w
=
(
R
v
i
e
w
−
1
)
T
R_{view} = (R^{-1}_{view})^{T}
Rview=(Rview−1)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.模型空间、世界空间、视野空间的区别
模型空间:局部坐标是对象相对于局部原点的坐标,也是物体起始的坐标
指顶点相对于(游戏)世界的坐标。
观察空间:从摄像机的视角所观察到的空间