0

在 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 轴的镜像呢?定位部分很容易,但我想知道四元数部分。谢谢!

4

2 回答 2

1

在 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;
于 2018-03-12T11:52:44.757 回答
0

手动修改四元数(将其视为普通 Vector4)不会给您正确的结果。修改 transform.eulerAngles 会好得多(并且由于您想通过全局轴进行镜像,我认为 eulerAngles 比 localEulerAngles 更合适,但您可以使用其中任何一个)

它仍然在内部转换为四元数,但在使用欧拉坐标系统时,它更容易理解你在旋转方面的位置

于 2018-03-16T16:05:30.597 回答