Pergunta

Na minha aplicação excesso estou simulando um avião com a câmera. Quando a velocidade de aviões é baixo eu pretendo ter o início nariz a apontar para o chão como a câmera cai. Meu primeiro instinto foi apenas mudar o passo até que fosse para baixo apontada para -90degrees. No entanto eu não pode simplesmente mudar o tom porque se o avião está inclinado de lado ou de cabeça para baixo, em seguida, ele iria notar se mudando de direção em direção ao chão.

Agora eu estou tentando fazer uma simulação aproximada deste deslocando os para baixo 'lookAt.y'. Para fazer isso eu estou tentando obter todas as coordenadas atuais da câmera que eu uso para ajustar a câmera (Eye.x, eye.y, eye.z, look.x, look.y, look.z, up.x, up.y, up.z). Em seguida, recuperar o jogo com os novos valores modificados.

Eu tenho trabalhado com o Camera.cpp e Camera.h para controlar minhas funções da câmera. Eles podem ser encontrados aqui

depois de adicionar métodos para obter todos os valores, apenas os valores de olho são na verdade atualizado quando vários movimentos de câmera são feitas. Acho que minha pergunta é como faço para recuperar esses valores.

A chamada glLoadMaxtrix é nesta função

void Camera :: setModelViewMatrix(void)

{ // load model view matrix with existing camera values

    float m[16];

    Vector3 eVec(eye.x, eye.y, eye.z);

    m[0] =  u.x; m[4] =  u.y; m[8]  =  u.z;  m[12] = -eVec.dot(u);

    m[1] =  v.x; m[5] =  v.y; m[9]  =  v.z;  m[13] = -eVec.dot(v);

    m[2] =  n.x; m[6] =  n.y; m[10] =  n.z;  m[14] = -eVec.dot(n);

    m[3] =  0;   m[7] =  0;   m[11] =  0;    m[15] = 1.0;

look.x = u.y; look.y = v.y; look.z = n.y; 

    glMatrixMode(GL_MODELVIEW);

    glLoadMatrixf(m);

}

Existe uma maneira de obter 'olho', 'lookAt', e 'up' valores da matriz aqui? Ou eu deveria fazer alguma coisa para obter esses valores?

-Obrigado antecipadamente a sua ajuda

Foi útil?

Solução

A classe câmera que você conectar-se a não é uma classe OpenGL real, mas deve ser simples o suficiente para trabalhar.

A função citado só tem os valores atuais do objeto câmera e envia-los para OpenGL. Se você olhar para a função conjunto da câmera, você pode ver como o programa calcula os valores que realmente lojas.

O valor do olho é armazenado diretamente. O valor lookAt é apenas o valor de (olho - n), pela matemática vetor. O valor acima é o mais difícil, mas se eu me lembro da minha vector de matemática corretamente, acredito que se = (n atravessar u).

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