查找具有指定局部关系的变换到另一个变换

问题描述 投票:-1回答:1

假设您具有Transform A,并且您想要找到Transform B,以使A存在于B的本地,并且具有特定的位置和旋转值。 注意,我不是在问如何将B定位在A的本地位置,而是要找到B的位置和旋转值,以便AB的位置具有指定的位置位置和旋转。我不仅在寻求从本地到全球或从全球到本地的转换。

例如,假设变换A具有位置Vector3APosition和旋转Vector3AEulerRotation。然后,我想为变换Vector3BPosition找到QuaternionBRotationB,以便A局部存在于B的位置Vector3ALocalToBPosition和旋转Vector3ALocalToBRotation

团结一致,我尝试了以下方法,但您可能会猜想它似乎不太正确:

Quaternion QuaternionBRotation = Quaternion.Euler(Vector3AEulerRotation - Vector3ALocalToBRotation)

Vector3 Vector3BPosition = 
    Matrix4x4.TRS(Vector3APosition, QuaternionBRotation, Vector3.one).Multiply3x4(Vector3ALocalToBPosition * -1)
unity3d math vector quaternions
1个回答
0
投票

不确定我是否完全了解它,但听起来您正在搜索Transform.InverseTransformPoint

将位置从世界空间转换为局部空间。

和相反的Transform.InverseTransformPoint

将位置从本地空间转换为世界空间

例如

Transform.TransformPoint

为在Transform.TransformPoint的局部空间中给定的var localPos = transformB.InverseTransformPoint(transformA.position); 的位置重新获得Vector3。

transformA

transformB设置为在transformA.position = transformB.TransformPoint(someLocalPosition); 局部空间内的transformA处的世界位置。


与旋转相似,有someLocalPosition,因此您可以使用

transformB

为了在Quaternion.Inverse的局部空间中获得Quaternion.Inverse的旋转。

© www.soinside.com 2019 - 2024. All rights reserved.