unity和3d坐标系以及和ue的比较

3d坐标系

unity和ue都采用左手坐标系
在这里插入图片描述
在3d软件中,大多数软件都用红色代表x轴,绿色代表y轴,蓝色代表z轴。
不同的是
在unity中X轴代表右方,Y轴代表上方,Z轴代表前方;
在ue中X轴代表前方,Y轴代表右方,Z轴代表上方;
在这里插入图片描述
在这里插入图片描述

移动、旋转、缩放

缩放:根据自身缩放,不受坐标系影响,
(移动和旋转则分为根据世界坐标系和自身坐标系2种)

移动:通常在update()方法中每帧重复执行,其中Vector3和Transform类都可以实现。Transform围绕的是自身坐标系,Vector3围绕的是世界(全局)坐标系。当自身坐标系和世界坐标系重合时,两种方法效果一致。

旋转:Unity 在内部使用四元数表示。

四元数在 Inspector 中显示等效的欧拉角值以便于进行编辑。四元数可用于表示游戏对象的方向或旋转。此表示方式在内部由四个数字组成(在 Unity 中称为 x、y、z 和 w),但是这些数字不代表角度或轴,您通常不需要直接访问它们。除非特别想深入研究四元数的数学原理,否则只需要知道四元数代表 3D 空间中的旋转即可,通常不需要知道或修改 x、y 和 z 属性。
与矢量可以表示位置或方向(从原点测量方向)的方式相同,四元数可以表示方向或旋转:从旋转“原点”或“Identity”测量旋转。由于旋转的这种测量方式(从一个方向到另一个方向),因此四元数不能表示超过 180 度的旋转。
优点:四元数旋转不受万向锁的影响。
局限性:单个四元数不能表示任何方向超过 180 度的旋转。
局限性:四元数的数字表示在直观上难以理解。

欧拉角
优点:欧拉角具有直观的“可读”格式,由三个角度组成。
优点:欧拉角可表示通过大于 180 度转向从一个方向到另一个方向的旋转
局限性:欧拉角受到万向锁 (Gimbal Lock) 的影响。当依次施加三个旋转时,第一个或第二个旋转可能导致第三个轴的方向与先前两个轴之一相同。这意味着已失去“自由度”,因为不能围绕唯一轴应用第三个旋转值。

https://docs.unity.cn/cn/2019.4/Manual/QuaternionAndEulerRotationsInUnity.html

个人理解:因为欧拉角的旋转是按照一定顺序进行的,具有过程性而不是直接看结果。在旋转过程中,外轴带动内轴共同旋转,但是内轴不能带动外轴旋转,所以当中间轴转到90度时,最外侧的轴和最内侧的轴会产生共面,从而造成死锁丢失自由度。这种缺陷是由于欧拉角本身在定义时产生的。所以没有办法解决,只能尽量避免。例如在unity中旋转摄像机时候,通常会进行巡航(沿y轴旋转)、俯仰(沿x轴旋转),而滚动(沿z轴旋转)频率最低,所以把z轴作为中间轴。而想彻底解决这个问题,则使用四元数。
查阅资料时发现,大多数文章都是用平衡框架来举例内轴不能带动外轴旋转的共面现象,但是在实际工程软件中操作如发现无论怎么旋转、旋转哪个轴,3个轴都会同时改变,所以我猜测本质上这些软件在内部都是用四元数进行旋转,而表示上用欧拉角更加直观。并且使用四元数也更便于插值。

猜你喜欢

转载自blog.csdn.net/weixin_48251552/article/details/129066439