Pergunta

Eu estou tentando obter a rotação da câmera em vários eixos em OpenGL (mas usando Java, LWJGL e jME especificamente). O objeto câmera me permite obter a direção como um Vector3f, mas isso não parece trabalho para obter a rotação componentizado; cada eixo aparece ligada a um outro eixo. Descobri que toAngleAxis com o componente ângulo com offset foi um hack rápido, mas não funciona corretamente na maioria das situações. Eu não sou tão bom em matemática, infelizmente, senão eu pode ter sido capaz de elaborar este problema :) Mais uma vez, eu só preciso de eixos X, Y e Z componentizado e em radianos, de 0 radianos em 2 radianos PI.

alguém pode ajudar?

Cheers e obrigado antecipadamente, Chris

Foi útil?

Solução

Obter os anjos de rotação requer apenas transformar o vetor vista dada em coordenadas cartesianas em coordenadas esféricas. Você pode encontrar as fórmulas em wikipedia .

viewvector = <x, y, z>

r = sqrt(x² + y² + z²)
phi = arctan2(y, x)
theta = arccos(z / r)

Note que você só pode obter dois anjos de rotação formam o vetor vista. A obtenção da terceira ângulo de rotação necessário conhecer o plano de projecção X ou eixo y.

Outras dicas

Eu recomendo a leitura sobre ângulos de Euler, de guinada / inclinação / rotação e orientação quaternion. Estes tópicos o ajudará a entender tudo que está envolvido. Se bem entendi, você está tentando construir ângulos de Euler de uma orientação específica.

Veja este href="http://www.ogre3d.org/wiki/index.php/Euler_Angle_Class" rel="nofollow código para alguns algoritmos para trabalhar com ângulos de Euler. Em particular, eu acredito que o que você quer é o método SetDirection.

Isto lhe dará uma guinada e pitch de um vetor direcional. Note que você só precisa de 2 rotações, porém, uma vez que "roll" exigiria uma rotação sobre o vetor direcional (ou a sua direcção especificada como uma única rotação quaternion).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top