Unityのオブジェクトを基準にしたワールド座標と相対座標の変換

最近のXR会議の開発では、同期のために複数の端末で姿勢情報が報告されるようになりますが、端末ごとに測位位置が異なるため、実際に世界座標をアップロードすると、まったく反対側になります。見つかりません。

したがって、姿勢情報を報告する場合、それはオブジェクトに対する相対座標であり、それを端側の相対座標に変換します。

roomObjectを変更する相対オブジェクトに設定します。

ワールド座標は、roomObjectを基準にした相対座標に変換されます。

 Vector3 headLocalPosition = roomObject.transform.InverseTransformPoint(headWorldPosition);
 Quaternion headLocalRotation = Quaternion.Inverse(roomObject.transform.rotation) * headWorldRotation;

roomObjectを基準にしたオブジェクトの相対座標は、ワールド座標に変換されます。

 Vector3 headWorldPosition= roomObject.transform.TransformPoint(headLocalPosition);
 Quaternion headWorldRotation= roomObject.transform.rotation * headLocalRotation;

このように、姿勢情報が複数の端側に循環する場合、それを特定のオブジェクトを基準にした座標に均一に変換してから、他の端側に送信し、他の端側はに従ってワールド座標に変換します。相対オブジェクト。

参照:

InverseTransformPointの回転に相当するものは何ですか?--Unity Answers

transform.TransformPoint()の背後にある数学は何ですか?-Unityフォーラム

おすすめ

転載: blog.csdn.net/grace_yi/article/details/123360689