Unity空间变换基础
- 模型空间
- unity空间开始的起点 (左手坐标系)
- 模型空间是美术在制作模型的时候确定的
- 世界空间
- unity 中最外围的坐标系((左手坐标系)
- 世界空间转换到模型空间,需要使用 坐标系的转换 p→c(Unity3d数学基础)
- 观察空间(右手坐标系)
- 观察空间可以看作是摄像机的模型空间,由这一点,在坐标变换中,可以选择平移原点在选择原点,来与摄像机模型重合,在对z取反(因为是右手坐标系)得到变换矩阵
- 第二种方法,使用 p→c,这里提醒一点如果正面推导比较复杂的情况下,已经选择求出 c→p,而p→c是其的逆矩阵
- 观察空间的投影方式(对应Camera组件的投影方式)
- 透视投影,对应物体近大远小,裁剪空间是一个视锥体上平面,对应摄像机组件的近平面,下平面对应摄像机的远平面
- 正交投影,对应物体一样大,裁剪空间是一个长方体
- 齐次裁剪空间
- 在opengl中 为 x,y,z=±1 组成的空间 在Dx中为 x,y=±1,z=0,z=1 的空间,unity使用opengl
- 观察空间转换到裁剪空间
- 1 透视投影矩阵,
- 第一步 将点投影到近平面,假设P在近平面上的投影点为P’
- 根据相似三角形有 p,y/py=n/pz 其中n为近平面的距离,在Camera中有该属性
所以p’y=-(n/pz)*py ,
- 但为什么有负号呢,因为 p’y的值大于0,而(n/pz)*py必定小于0,但在相似中比没有判断正负值,所以有负号 ,
同理可以得到p’x=-(n/pz)*px为了方便默认p(x,y,z) 所以有p(-(n/z)x,-(n/z)*y,z,-n,1)
- 因为裁剪矩阵必定有位置的移动,即为4*4矩阵,有因为z坐标肯定是负数,因为是右手坐标系,所以在此改变
p(nx,ny,nz,-z)
- 所以转换到近平面的矩阵为
| n | 0 | 0 | 0 |
| 0 | n | 0 | 0 |
| n | 0 | n | 0 |
| 0 | 0 | -1 | 0 |
- 第二步将近平面上的点投影到一个x,y ,z=±1的平面上 L(-w/2,h/2) R(w/2,h/2)
- 只需要分别对xyz进行一个缩放
- 首先px变到px,的矩阵很明显是一个线性矩阵,所以px’=kpx+b, 得到
-1=(-w/2)k+b
1=(w/2)k+b
所以px’=(2n/w)px同理py’=(2n/h)py,这里加上n是为了合并 第一次投影的矩阵
此时已经证明完成,但此时pz的值还没有换算完成 因为也需要将z变为-1到1之间,而z的最小值为-f,最大值为-n,所以这也是个线性变换 所以得到p’=(kp+b)/-p 这里除以-p是因为在上一个矩阵的后z值变为恒定。在上面的的变齐次坐标后z值是被乘了-z,所以在这里先除掉,代表拒绝 上个变换的z值变换,因为那是无效的,并会在在此变换中达到目标值
-1=-fk+b/-f ||| 1=-nk+b /-n
k= -(f+n)/f-n ||| b=-2fn/f-n
得到矩阵为
| wn/2 | 0 | 0 | 0 |
| 0 | nh/2 | 0 | 0 |
| 0 | 0 | -(f+n)/f-n | -2fn/f-n |
| 0 | 0 | -1 | 0 |
- 对结果x’y’z’进行归一第四个分量归一,最后看值是否在-1到1来确定是否需要裁减
- 分析裁剪空间的没有归一的z’=[(f+n/f-1)-2fn/(f-n)] / z,当z变小的时候,z,会变大 这个z,可以理解为精度
- 当z不变 (f-n)变小的时候,z’也会变大,说明近平面远平面影响精度
- 在裁剪空间中的第四分量为-z ,用来代表物体的深度值,这里的-z为正数,其实这是为什么观察空间为右手的好处之一
- 正交投影的矩阵比较简单,xyz和和上面的z值运算是一样的
- 屏幕空间
- 当模型坐标到了齐次空间的时候 ,归一操作 是在这里发生的,从裁减到屏幕就比较简单了,只是一个缩放的过程 Screen x=屏幕宽* x / 2+屏幕宽/2 |||Screen y=屏幕高*y / 2+屏幕高/2 (这个是已经进行归一公式,不然需要x和y需要除以-z)
相关文章:
-
2022-12-23
-
2021-04-19
-
2021-09-13
-
2022-12-23
-
2021-05-22
-
2021-05-20
-
2021-06-02
-
2022-12-23
猜你喜欢
-
2022-12-23
-
2021-12-16
-
2022-12-23
-
2021-09-04
-
2022-12-23
-
2021-09-03
-
2021-05-20
相关资源
-
下载
2021-06-05
-
下载
2021-06-05
-
下载
2023-02-17
-
下载
2021-06-05