在 Unity 中,我想沿 x 轴对称镜像变换,对于许多形状,这工作正常:
reflection.localRotation = new Quaternion(
original.localRotation.x * -1f,
original.localRotation.y,
original.localRotation.z,
original.localRotation.w * -1f
);
reflection.localPosition = new Vector3(
original.localPosition.x * -1f,
original.localPosition.y,
original.localPosition.z
);
但是沿 y 轴镜像的代码是什么?那么沿z轴的镜子呢?定位部分很容易,但我想知道四元数部分。谢谢!
在3D中,你并不是真正沿着轴镜像,而是关于一个平面。
Unity 论坛中有一个关于此的主题。其中一种解决方案提出了一种不仅针对特定轴对齐平面旋转,而且针对由法线表示的任何镜像平面旋转的方法。
var objectQuat = transform.rotation;
var plane = GetMirrorPlane(); // choose yours here
var mirrorNormalQuat = new Quaternion(plane.x, plane.y, plane.z, 0);
var reflectedQuat = mirrorNormalQuat * objectQuat * mirrorNormalQuat;
transform.rotation = reflectedQuat;
修改四元数(将其视为普通的 Vector4(不会给你正确的结果。修改transform.eulerAngles会好得多(当你想通过全局轴镜像时,我会想象eulerAngles比localEulerAngles更合适,但你可以使用任何一个(
它仍然在内部转换为四元数,但在使用欧拉坐标系时,它更容易理解您在旋转方面的位置