备注:希望和大家一起交流学习,如果有不同的观点欢迎一起讨论学习,不喜勿喷,谢谢。
坐标系
- 坐标系
- 2D 笛卡尔坐标系
- 3D坐标系
- 左手坐标系
- 右手坐标系
- 总结:
- unity Vector
坐标系
2D 笛卡尔坐标系
这个没什么好说的,非常简单,就是简单的 X - Y 坐标,我们的屏幕坐标就是标准的 2D 坐标系,只是采用的不是 x-y 表示,而是使用 width - height 表示。
但是屏幕坐标系的方向不是一定的,比如 unity 屏幕坐标如下,使用左下角作为原点,有些地方会使用左上角作为原点。
3D坐标系
3D 坐标系根据 z 轴的方向不同,主要分为 “左手坐标系” 和 “右手坐标系”。
左手坐标系
伸出左手,大拇指指向右边(x轴正向),食指指向上边(y轴正向),中指指向你朝向的方向(z轴正向)。(手背朝自己)
比如,DirectX 采用左手坐标系,unity 采用左手坐标系
,传统的计算机图形学也采用左手坐标系
等,unity 如下:
右手坐标系
伸出右手,大拇指指向右边(x轴正向),食指指向上边(y轴正向),中指指向自己(z轴正向)。(手心朝自己)
比如: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)
“forward” 言外之意就是相对原点向前,因为 unity 采用 左手坐标系,所以向前就是Z轴正向所指方向,站在原点看,Vector3.forward 就是(0,0,1),相对于 “back” ,“down”, “left”, “right” 等都是同一个道理。