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
          Unity空间变换基础
        • 根据相似三角形有 p,y/py=n/pz 其中n为近平面的距离,在Camera中有该属性
          所以py=-(n/pz)*py ,
        • 但为什么有负号呢,因为 py的值大于0,而(n/pz)*py必定小于0,但在相似中比没有判断正负值,所以有负号 ,
          同理可以得到px=-(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进行一个缩放
          Unity空间变换基础
        • 首先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=-f
          k+b/-f ||| 1=-n
          k+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    |
        • 对结果xyz进行归一第四个分量归一,最后看值是否在-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
相关资源
相似解决方案