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