备注:希望和大家一起交流学习,如果有不同的观点欢迎一起讨论学习,不喜勿喷,谢谢。


坐标系

  • 坐标系
  • 2D 笛卡尔坐标系
  • 3D坐标系
  • 左手坐标系
  • 右手坐标系
  • 总结:
  • unity Vector


坐标系

2D 笛卡尔坐标系

这个没什么好说的,非常简单,就是简单的 X - Y 坐标,我们的屏幕坐标就是标准的 2D 坐标系,只是采用的不是 x-y 表示,而是使用 width - height 表示。

unity 游戏控件坐标 unity坐标轴_线性代数


但是屏幕坐标系的方向不是一定的,比如 unity 屏幕坐标如下,使用左下角作为原点,有些地方会使用左上角作为原点。

unity 游戏控件坐标 unity坐标轴_线性代数_02

3D坐标系

3D 坐标系根据 z 轴的方向不同,主要分为 “左手坐标系” 和 “右手坐标系”。

左手坐标系

伸出左手,大拇指指向右边(x轴正向),食指指向上边(y轴正向),中指指向你朝向的方向(z轴正向)。(手背朝自己)

unity 游戏控件坐标 unity坐标轴_屏幕坐标_03

比如,DirectX 采用左手坐标系,unity 采用左手坐标系传统的计算机图形学也采用左手坐标系 等,unity 如下:

unity 游戏控件坐标 unity坐标轴_3D_04

右手坐标系

伸出右手,大拇指指向右边(x轴正向),食指指向上边(y轴正向),中指指向自己(z轴正向)。(手心朝自己)

unity 游戏控件坐标 unity坐标轴_屏幕坐标_05


比如:openGL 采用右手坐标系线性代数采用右手坐标系 等。

总结:

  • “左手坐标系” 和 “右手坐标系 ” 没有什么好坏之分,他们都是一样的,只是因为研究领域和不同背景下,会采用不同的坐标系。
  • **2D 坐标系是“等价”的**,这里的“等价”的意思是,如果存在两个 2D 坐标系A 和 B,无论A坐标系如何旋转,最终总是可以和坐标系B重合,x,y指向相同的方向。
  • **3D 坐标系是“不一定等价”的**,比如 左手坐标系 和 右手坐标系,无论 左手坐标系 如何旋转,最终也不可能和 右手坐标系 每个坐标指向相同的方向。

unity Vector

通过上面我们已经了解到 unity 是采用左手坐标系的,那么,代码中经常出现的 “Vector3.forward”,“Vector3.back”,“Vector3.down” 表示什么含义呢?

以下是unity Vector3 的部分源码,我们已经看到了,

Vector3.forward = (0,0,1)

Vector3.back =(0,0,-1)

Vector3.down = (0,-1,0)

unity 游戏控件坐标 unity坐标轴_线性代数_06


“forward” 言外之意就是相对原点向前,因为 unity 采用 左手坐标系,所以向前就是Z轴正向所指方向,站在原点看,Vector3.forward 就是(0,0,1),相对于 “back” ,“down”, “left”, “right” 等都是同一个道理。