Faculdade de Informática da PUCRS

Disciplina de Tópicos Especiais em Computação Gráfica

Prof. Márcio Serolli Pinho


Navegação em Ambientes Virtuais

A navegação em OpenGL ou, em outras palavras, o posicionamento do observador é feito normalmente com a função gluLookAt. Nesta função define-se a posição do observador e o seu ponto de interesse, além do vetor que aponta para o "lado de cima" do cenário 3D.
 

Andando "para frente" com a glLookAt

Para permitir que um observador ande na direção em que ele está olhando é necessário somar à posiçõa atual do observador um vetor que tenha a mesma direção que vetor que vai do observador até o alvo. A mesma soma deve ser fetia ao ponto alvo.

É interessante que este vetor seja unitário pois assim se pode controlar a velocidade do deslocamento.
A fórmula a seguir demonstra como pode ser feito o deslocamento descrito acima.

PosicaoNova = PosicaoAtual + VetorAlvoUnitario * TamanhoDoPasso
AlvoNovo = AlvoAtual + + VetorAlvoUnitario * TamanhoDoPasso

Olhando "para os lados" com a glLookAt

Para permitir que um observador "olhe para os lados" é preciso recalcular o ponto Alvo, aplicando sobre ele uma rotação ao redor do eixo Y.

Para rotacionar um ponto ao redor deste eixo usa-se a seguinte fórmula:

AlvoNovo.X = AlvoAtual.X*cos(alfa) + AlvoAtual.Z*sen(alfa)
AlvoNovo.Y =  AlvoAtual.Y
AlvoNovo.Z = -AlvoAtual.X*sen(alfa) + AlvoAtual.Z*cos(alfa)
Note, entretanto que esta fórmula rotaciona o ponto ao redor do ponto (0,0,0).

Como fazer para rotacioná-lo corretamente ?

Uma alternativa é executar os seguintes passos:
 
 


 


 
 


 
 


 
 

Exercício

A partir do exemplo básico, construa um programa que mova o observador para frente e permita que ele olhe para os lados. Faça o controle dos moviemntos por teclas.

    Exemplo Básico para VC
    Exemplo Básico para DEVCPP