不同的问题需要不同的坐标系来描述和解决特定的空间问题
坐标空间
用于描述和定位物体位置的数学概念
坐标空间的变换
是指在渲染管线中将坐标数据转置(模型空间、世界空间、观察空间、裁剪空间、屏幕空间)中进行变换计算
坐标空间由原点位置和坐标轴方向组成
坐标空间的关系:
Unity中世界坐标空间相对于基础坐标空间,其他大部分坐标空间都是世界坐标空间的子坐标空间
Unity中坐标空间的变换: 实际就是父子空间进行点/向量的转换
坐标空间的变换矩阵:
Xxs Yxs Zxs Sox
Xys Yys Zys Soy
Xzs Yzs Zzs Soz
0 0 0 1
前三列是子坐标空间相对于父坐标空间的xyz轴的方向向量(这里不是单位方向向量,单位方向向量即不存在缩放的方向向量)
第四列是子坐标空间相对父坐标空间的原点
父坐标空间转换到子坐标空间求上面矩阵的逆矩阵就可以了
模型空间
模型空间也叫对象/局部空间,每个模型都有自己独立的坐标空间
模型空间是Unity世界空间的子空间
Unity使用左手坐标系
模型坐标的点相对世界坐标的位置 = 平移矩阵 x 旋转矩阵 x 缩放矩阵 x 模型坐标的列矩阵
[!info] 多层嵌套
存在多层模型坐标时,就一层层向上计算或使用transform中的position、rotation、lossyScale变量算
上述坐标变换规则不包含缩放,如果用该规则计算若存在缩放,只要用xyz轴的单位向量乘对应轴的缩放因子即可。
观察空间
==观察空间也是世界空间的子空间==
也就摄像机空间,摄像机决定了渲染的视角和视野,观察空间遵循右手坐标原则,xyz轴的正方向分别对应摄像机的右、上、后方
观察空间变换(观察变换):将模型空间中的点/向量从世界空间中变换到观察空间
- 利用坐标变换规则的逆矩阵计算
- 逆向变换观察空间让观察空间与世界空间重合
裁剪空间
视锥体:表示三维空间中摄像机可视区域的虚拟体积,类似一个六面体的形状,该范围外的物体将在渲染时被裁剪掉,提升渲染性能
视锥体分为==远近裁剪平面==以及==上下左右裁剪平面==
透视投影:视锥体类似一个金字塔,远裁剪屏幕比近裁剪屏幕大,会产生透视效果
正交投影:视锥体类似一个长方体,远近裁剪平面一样大,不会产生透视效果
齐次裁剪空间
坐标范围为(-1,-1,-1)到(1,1,1),超出该范围会被裁掉
齐次裁剪空间是将摄像机的视锥体投影到一个规范的立方体,这个立方体就是齐次裁剪空间方便我们进行裁剪
透视摄像机投影方式为视锥体内的顶点与原点相连在近裁剪平面的交点为投影点
正交摄像机投影方式为视锥体内顶点向近裁平面作左右面平行线与其交点为投影点
相似三角形:对应角相等,对应边成比例,k为相似比
屏幕空间
渲染结果在屏幕上显示的坐标空间
在Unity中,屏幕空间左下角为(0,0)点,右上角为(分辨率宽,分辨率高)
屏幕空间变换就是将模型空间中的点/向量从裁剪空间变换到屏幕空间中
屏幕空间是二维的因此Z分量被用于深度缓冲中,深度测试用来决定是否被遮挡等。