Vetores rotações 3D tiliting câmera

votos
1

Esperemos resposta fácil, mas eu não posso obtê-lo.

Eu tenho um 3D rende motor de eu ter escrito.

Eu tenho a posição da câmera, a posição lookat eo vetor para cima.

Eu quero ser capaz de tilt a câmera esquerda, direita, para cima e para baixo. Como uma câmera em um tripé fixo que você pode pegue a alça e incline-lo para cima, baixo, esquerda direita etc.

A matemática tocos mim. Eu tenho sido capaz de fazer frente / para trás dolly e para cima / baixo / esquerda / direita panning, mas não pode trabalhar fora a matemática vector para obtê-lo a inclinar.

Para inclinação esquerda e direita quero rodar a posição lookat em torno da posição da câmera, mas eu preciso levar em conta o vector-se, caso contrário, a rotação não sabe qual o eixo para se virar.

A matemática / algoritmo que eu preciso é ao longo das linhas de ...

Camera = (cx, CY, CZ) Lookat = (lx, ly, LZ) Up = (ux, uy, uz)

RotatePointAroundVector (LX, LY, LZ, ux, uy, uz, montante)

Alguém pode ajudar com a matemática envolvida?

Muito Obrigado.

Publicado 15/01/2010 em 04:22
fonte usuário
Em outras línguas...                            


3 respostas

votos
2

Você poderia fazer uma frente ponto da câmera, em seguida, gire que em torno da câmera (usando trig) e usar o seu lookat () para girar a câmera.

Isso não vai funcionar uma vez que você tem que começar a usar o rolo (rotação em torno do Z). Então você pode querer criar um quaternion base classe câmera. Este link me ajudou: gpwiki.org/Quaternion ...

Respondeu 15/01/2010 em 13:28
fonte usuário

votos
0

Basicamente, você visualizar um sistema de coordenadas local para a sua câmera.

O Z locais é o vetor lookat (do centro da câmera para o ponto lookat) e está "na tela". O local Y será em direção para cima do ecrã. Se você manter a sua câmera para cima vector perpendicular ao vector câmera lookat, então o vector-se também a Y. local, The X local será normal para os dois outros eixos (que é seu produto cruzado após sua normalização).

Rotativa esquerda-direita é uma questão de rotação do vector lookat sobre o eixo Y locais (yaw). Rotativa de cima para baixo é uma questão de rotação do vector acima e o vector lookat em torno do eixo X local (pitch). " Inclinando a cabeça" esquerda-direita é uma questão de rotação vetor sobre o eixo Z locais (bancários).

Cada vez que você muda o vetor lookat ou o vector-se, é preciso recalcular os eixos locais.

Respondeu 14/06/2010 em 02:09
fonte usuário

votos
0

Pode não ser matematicamente ideal, mas você pode de-compor a câmera para olhar-no vector em três vetores - dois que definir o plano horizontal, e o vetor de up.

Para obter o plano horizontal, você pode obter um vector como o produto vetorial do vetor para cima eo camer a olhar-no vector. Você pode então começar outro vector ortogonal, tomando o produto escalar de cima eo vector acabou de encontrar. Não se esqueça de normalizar suas três vetores.

Em seguida, pegue o produto escalar de sua câmera para olhar-no vector com os seus três vetores, e agora fazer a rotação sobre o plano horizontal (tratamento de seus vetores, como se fossem o eixo de coordenadas).

Desculpe por colocar tudo em palavras. Eu espero que isso ajude.

Respondeu 15/01/2010 em 04:46
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more