Estoy usando una cámara tipo FPS, y usa cuaterniones. Pero, cada vez que trato de mirar hacia arriba y hacia los lados, se inclina y, a veces, puede volcarse. ¿Cómo puedo arreglar esto?
17
Estoy usando una cámara tipo FPS, y usa cuaterniones. Pero, cada vez que trato de mirar hacia arriba y hacia los lados, se inclina y, a veces, puede volcarse. ¿Cómo puedo arreglar esto?
Respuestas:
Podrías descomponer tu cuaternión en un conjunto de ángulos de guiñada / inclinación / balanceo, pero eso suele ser excesivo.
En lugar de componer tus cuaterniones de esta manera:
Prueba esto:
Entonces nunca generará inclinación / balanceo y es equivalente a almacenar guiñada y cabeceo por separado
fuente
framePitch
yframeYaw
float
tipos? Además, agradecería algunas aclaraciones sobre su primera oración.cameraOrientation
,framePitch
yframeYaw
son todos los cuaterniones (cada uno de cuaternión es de 4 flotadores o dobles).Este es un problema que tuve durante un tiempo y no pude encontrar ninguna respuesta, así que pensé en publicarlo aquí.
En realidad es bastante simple. La forma más probable de hacer las rotaciones es la siguiente:
Pero, hacerlo así tampoco funciona.
Lo que tiene que hacer es hacerlo en el primer orden para las rotaciones hacia arriba y hacia abajo, y en el segundo orden para las rotaciones laterales.
Para mí fue así:
Por una razón, la primera forma tiene la rotación relativa a la dirección lateral actual, que desea para arriba y abajo, pero no para las rotaciones laterales, por lo que se necesita el segundo orden.
fuente
Para una cámara FPS, generalmente no desea rodar y está limitado a +/- 90 grados de inclinación, por lo que solo debería seguir el estado actual utilizando los ángulos de guiñada y inclinación. El pleno poder de los cuaterniones no es realmente útil para esto.
Todavía puede convertir los ángulos de guiñada / inclinación hacia y desde los cuaterniones en caso de que desee realizar la transición entre la cámara FPS y las cámaras animadas utilizando la interpolación de fotogramas clave de cuaternión, o algo así.
fuente
Otro truco simple es colocar la cámara en un GameObject y hacer que la rotación Yaw controle el objeto del juego, mientras que la cámara secundaria está configurada con las coordenadas Pitch:
fuente