Unity中屏幕坐标转世界坐标ScreenToWorldPoint()时z轴的设置

ScreenToWorldPoint(Input.mousePosition)就是将屏幕坐标转换为世界中的坐标 ,但是在使用此函数之前,首先要明确摄像机的两种投影模式,不同的投影方式,转换的效果也不太相同。

透视模式(Perspective):

当摄像机处于透视模式下,转换屏幕坐标到世界坐标时,z值起着关键作用。以下是具体原因:

  1. 透视投影的特点:

    透视模式模拟人类眼睛的视角,物体会随着与摄像机距离的增加而显得更小。透视投影是以摄像机为中心向外放射的,因此需要深度信息(z值)来确定物体在三维空间中的具体位置。
  2. z值的重要性:

    z值指定了物体距离摄像机的深度。没有z值,无法明确该点在摄像机前方的哪个位置。因此如果z值为0,转换后的坐标始终是摄像机的坐标,这是因为在透视模式下,z=0意味着点与摄像机位于同一位置。
  3. 视锥体:

    透视模式使用视锥体来描述摄像机的视野,物体的位置需要在这个三维视锥体内指定。指定不同的z值,也即是确定转换后的坐标处于视椎体中的哪一个截面。

正交模式(Orthographic):

当摄像机处于正交模式时,z值的作用则相对简单:

  1. 正交投影的特点:

    正交模式没有透视缩放,物体不会因为远离摄像机而显得更小,所有对象的大小在视图中保持一致。转换屏幕坐标时,x和y坐标不需要深度信息(z值)即可计算其在世界空间中的位置。
  2. 不需要指定z值:

    在正交投影中,ScreenToWorldPoint只需要x和y即可确定对象的位置,z值只用来确定在深度方向上的层级,而不影响x、y方向的转换。即使不指定z值,正交模式下,x和y的映射是直接的且线性的。

结论

  • 透视模式:需要指定z值,因为它影响物体在三维空间中的位置,决定物体的深度和缩放效果。
  • 正交模式:不需要z值即可获取x、y坐标的世界空间位置,因为视图是平行投影,不存在缩放。

猜你喜欢

转载自blog.csdn.net/Charizard_/article/details/140968311