Estou usando uma câmera tipo FPS e ela usa quaternions. Mas, sempre que tento olhar para cima e para os lados, ele se inclina e, às vezes, pode virar de cabeça para baixo. Como posso consertar isso?
17
Estou usando uma câmera tipo FPS e ela usa quaternions. Mas, sempre que tento olhar para cima e para os lados, ele se inclina e, às vezes, pode virar de cabeça para baixo. Como posso consertar isso?
Respostas:
Você pode decompor seu quaternion em um conjunto de ângulos de guinada / inclinação / rotação, mas geralmente é um exagero.
Em vez de compor seus quaternions assim:
Tente o seguinte:
Nunca gerará inclinação / rotação e é equivalente a armazenar guinada e inclinação separadamente
fonte
framePitch
eframeYaw
float
tipos? Também agradeceria alguns esclarecimentos sobre sua primeira frase.cameraOrientation
,framePitch
eframeYaw
são todos quatérnions (cada Quatérnion é 4 flutuadores ou duplos).Esse é um problema que tive por um tempo e não consegui encontrar respostas para, então pensei em publicá-lo aqui.
Na verdade é bem simples. Como você provavelmente está fazendo as rotações é assim:
Mas, fazer assim também não funciona.
O que você precisa fazer é fazê-lo na primeira ordem para as rotações para cima e para baixo e na segunda ordem para as rotações laterais.
Para mim, foi assim:
Por um motivo, a primeira maneira tem a rotação em relação à direção lateral atual, que você deseja para cima e para baixo, mas você não deseja isso para as rotações laterais, e é por isso que a segunda ordem é necessária.
fonte
Para uma câmera FPS, você geralmente não quer rolar e está limitado a +/- 90 graus de inclinação, então eu acompanharia o estado atual usando ângulos de guinada e inclinação. Todo o poder dos quaternions não é realmente útil para isso.
Você ainda pode converter os ângulos de guinada / pitch de e para quaternions, caso deseje fazer a transição entre a câmera FPS e as câmeras animadas usando a interpolação do quadro-chave de quaternion ou algo assim.
fonte
Outro truque simples é colocar a câmera em um GameObject e fazer com que a rotação de guinada controle o objeto do jogo, enquanto a câmera secundária estiver configurada com as coordenadas de afinação:
fonte