Conversión de coordenadas mundiales y coordenadas relativas relativas a un objeto en Unity

Recientemente, en el desarrollo de la conferencia XR, se informará cierta información de actitud en múltiples terminales para la sincronización. Dado que las posiciones de posicionamiento en diferentes terminales son diferentes, si carga las coordenadas mundiales, de hecho, estará del otro lado. no se puede localizar

Por lo tanto, cuando reportamos información de actitud, son coordenadas relativas relativas a un objeto, y luego las convertimos en coordenadas relativas en el lado final.

Establezca roomObject en el objeto relativo que desea cambiar,

Las coordenadas mundiales se convierten en coordenadas relativas relativas al roomObject:

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

Las coordenadas relativas del objeto en relación con roomObject se convierten en coordenadas mundiales:

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

De esta manera, cuando nuestra información de actitud circula en múltiples extremos, la convertimos uniformemente en coordenadas relativas a un objeto determinado, y luego la enviamos a otros extremos, y otros extremos se convierten en coordenadas mundiales de acuerdo con objetos relativos.

referencias:

¿Cuál es el equivalente de rotación de InverseTransformPoint? - Unidad Respuestas

¿Cuál es la matemática detrás de transform.TransformPoint()? - Foro de la Unidad

Supongo que te gusta

Origin blog.csdn.net/grace_yi/article/details/123360689
Recomendado
Clasificación