So Paulo, 20 de maio de 2003.
Texto e cdigo criados por Murilo Antonio Salomo Garcia
Este  um cdigo aberto e sua cpia utilizao e alterao esto aqui autorizadas,
peo apenas que mantenha a referncia ao autor do original.

1.Objetivo
Utilizar as rotinas grficas tridimensionais interativas do OpenGL e GLUT para a 
implementao de um simulador de vo simples. Este programa foi desenvolvido como 
parte do curso de Introduo Grfica, lecionado no IME-USP pelo professor Carlos 
Hitoshi Morimoto no 1o semestre de 2003. Partes deste texto foram extradas das 
instrues sobre o trabalho fornecidas pelo professor.


2.CONTROLES(teclado e mouse)
 A coordenada (x,y) do mouse controla a direo da aeronave (yaw e pitch). Imagine um 
sistema de coordenadas centrado no piloto, com x, y, e z apontando para a direita, para 
cima, e para trs respectivamente. Roll  uma rotao ao redor do eixo z, yaw  uma rotao 
ao redor do eixo y, e pitch  uma rotao ao redor do eixo x do piloto. Note que movendo o 
mouse para a direita causa a nave a se mover para a direita, ou seja, a cena parece se mover 
para a esquerda,e quando o mouse  movido para trs, a inclinao da aeronave aumenta 
(ela sobe), causando um movimento da cena para baixo (ou nave para cima).
 teclas a/d: aumenta/diminui a velocidade da aeronave por um montante deltaV [5m/s].
No se trata de um simulador de vo real. Por exemplo, apertando repetidamente a tecla 'd', 
a aeronave para, podendo inclusive voar para trs.
 tecla s: stop. Para a aeronave.
 tecla q: (quit) encerra o programa.
 teclas z/x/c: As teclas 'z', 'x', e 'c' controlam a velocidade de roll, 'z' aumenta a velocidade 
em 2 graus por segundo no sentido anti-horrio, 'c' aumenta a velocidade em 2 graus por segundo 
no sentido horrio, e 'x' para a rotao instantaneamente.
 tecla v: simule mltiplas aeronaves, e popule a sua cena com diversas delas (lembre-se de seguir 
o formato do arquivo de entrada imput.txt, o terreno  definido no arquivo terrain.txt). Quando 
a tecla v  pressionada, o simulador passa a mostrar a cena do ponto de vista de outro aeroplano, 
ciclicamente, at voltar  primeira nave. Considere que os demais aeroplanos ficam "parados", 
e, portanto as velocidades se aplicam apenas ao aeroplano sendo simulado.
 tecla b: ao pressionar essa tecla, ao invs de gerar uma cena vista pelo piloto, crie uma vista 
alternativa,colocando a cmera a 50 metros atrs da aeronave. Ao pressionar b, novamente, a vista 
passa para um ponto 100m atrs da aeronave, e ao terceiro toque, volta a ser centrado no piloto.
 Boto direito do mouse: gera uma pausa no programa, que volta a rodar quando esse boto  
pressionado novamente.
 Boto esquerdo do mouse: quando em pausa, esse boto executa um passo (single step) da animao,
imprimindo a posio, direo de translao, velocidades da nave, nave corrente e cmera corrente.

3. Terreno(arquivo terrain.txt)
A cena consiste de uma ilha flutuando no meio de um oceano azul. O fundo recebe a cor do cu. 
O oceano  modelado como um retngulo azul, horizontal e muito grande. As coordenadas globais
foram definidas com relao ao plano do oceano (+x leste e +y norte) e o eixo z aponta para cima. 
As primeiras duas linhas do arquivo de entrada contem os valores mnimos e mximos para as 
coordenadas x e y do retngulo do oceano. A coordenada z do retngulo  zero (veja o arquivo 
input.txt).
A ilha  modelada atravs de um mapa de elevao, ou seja, uma matriz bidimensional 
(coordenadas x,y) de elevaes (valores de z). A ilha  definida dentro do plano x,y pelo retngulo 
(xtemin, xtemax, ytemin, ytemax), que  composto, portanto por elementos em uma grade retangular. 
As elevaes desses elementos so ento definidas, uma linha de cada vez, a partir do canto 
inferior esquerdo ao canto superior direito da ilha.
O terreno  mostrado subdividindo-se cada elemento da grade em dois tringulos, traando uma 
diagonal do canto inferior esquerdo ao canto superior direito do elemento de grade. A cor de 
um vrtice  baseada em sua elevao. 

4. Posio Inicial da Aeronave(arquivo input.txt)
Aps a definio do terreno, o arquivo de entrada tambm fornece o nmero de aeronaves e suas 
posies iniciais e orientaes. O primeiro nmero  o nmero de aeronaves. Esse nmero  seguido 
por um conjunto de linhas, uma linha para cada aeronave. Os primeiros 3 nmeros de uma linha 
definem as coordenadas (x, y, z) da aeronave (em coordenadas globais). Os prximos 3 ngulos 
definem os ngulos de Euler (teta x, teta y, teta z) que definem a orientao dessa aeronave, em graus. Esses 
ngulos definem trs rotaes: em x, y, e z respectivamente (positivos no sentido anti-horrio).
Aps essas rotaes, o plano est apontando na direo -z no frame resultante, com o eixo y 
apontando para cima (no sistema de coordenadas do piloto). Por exemplo, os ngulos '90 0 0' 
resultariam em um plano apontando no sentido do eixo +y, com a coordenada global +z para cima. 
O ltimo nmero na linha  a velocidade inicial (para frente em metros por segundo). As 
velocidades iniciais das rotaes de pitch, yaw e roll so zeradas. O arquivo input.txt 
contem um exemplo de um arquivo de entrada.
