当在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轴的镜像是什么?定位部分很简单,但我想知道四元数部分。谢谢!
发布于 2018-03-12 19:52:45
在3d中,您并不是沿着轴进行镜像,而是在平面上进行镜像。
有一个关于这方面的thread in the Unity forum。其中一种解决方案提出了一种方法,不仅可以旋转特定的轴对齐平面,还可以旋转由法线表示的任何镜像平面。
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-17 00:05:31
手动修改四元数(将其视为普通Vector4)不会得到正确的结果。你最好修改transform.eulerAngles (因为你想通过一个全局轴来镜像,所以我认为eulerAngles比localEulerAngles更合适,但是你可以使用这两种语言中的任何一种)
它仍然在内部转换为四元数,但在使用Euler坐标系统时,它只是更容易理解您在旋转方面所处的位置
https://stackoverflow.com/questions/49232400
复制相似问题