【发布时间】:2022-01-06 06:29:43
【问题描述】:
我正在尝试在 Unity 中旋转 3D 平面,给定三个点。这些点并不总是相同的,但它们总是在这张图片中的红点上
我知道这些点的绝对位置,以及它们相对于平面的位置。例如,我可能知道点 (-5, 5) 位于 (10, -4, 13)。
我知道当三个点在一条线上时(例如 (-5, 5)、(0, 5) 和 (5, 5)),不可能计算完整的旋转,所以我已经抛出异常在这种情况下。但是,当三个点不在一条线上时,应该可以计算完整的旋转。
到目前为止,我已经使用下面的代码进行旋转,但这错过了围绕 y 轴的旋转(示例使用点 (-5, 5)、(5, 5) 和 (-5, -5 )。
Vector3 p1 = Point1.transform.position;// point 1 absolute position
Vector3 p1Relative = new Vector3(-5, 0, 5);
Vector3 p2 = Point2.transform.position;// point 2 absolute position
Vector3 p2Relative = new Vector3(5, 0, 5);
Vector3 p3 = Point3.transform.position;// point 3 absolute position
Vector3 p3Relative = new Vector3(-5, 0, -5);
Gizmos.DrawSphere(p1, .1f);
Gizmos.DrawSphere(p2, .1f);
Gizmos.DrawSphere(p3, .1f);
Vector3 normal = Vector3.Cross(p2 - p1, p3- p1);
rotator.transform.up = normal;
如何扩展或更改此代码以包含围绕 Y 轴的旋转?提前谢谢你。
【问题讨论】:
-
我很困惑......如果你有一个明显中心位置的平面......那么有两个额外的点应该足以计算这个权利的旋转?
-
确实如此!然而,我也在 3D 空间中移动飞机。不过我可以计算出这个中心位置。
标签: c# unity3d math vector rotation