4645Z-4 - Fundamentos de Computação Gráfica
Trabalho II - Navegação em um Terreno



Resumo

Este trabalho deverá criar um cenário 3D em OpenGL, formado por um terreno com relevo, no qual sejam colocados objetos fixos como construções e árvores.

Neste cenário o usuário deve controlar o movimento de um veículo, que deverá ter sua altura controlada pela altura do terreno.


O Terreno

O terreno deverá ter dimensões de 500 x 500 m e deve ser lido de um mapa de altura armazenado em uma imagem de 500 x 500 pixels.
A altura máxima deve ser configurável.

Deve ser possível alterar o mapa de altura apenas mudando o nome do arquivo e executando novamente o programa.  O terreno deve ser colocado no plano XZ, com os pontos mais baixos no Y = 0.
Seguem alguns exemplos de sites com mapas de altura:

https://tangrams.github.io/heightmapper (usado para gerar a imagem a seguir)



https://www.deviantart.com/genesis199/art/17-Height-Maps-Masks-For-You-428132930  (CIique na imagem para obter uma cópia local)



http://planetside.co.uk/free-downloads/terragen-4-free-download/


O Veículo do Usuário

O veículo do usuário deve ter do tamanho aproximado de um carro real. Este veículo deve ser representado por um objeto 3D, lido de arquivo, no formato TRI. Este objeto deve lembrar um carro.

Deve ser possível mover o veículo para frente e para trás, além de girá-lo para esquerda e direita.
A posição Y do carro deve ser controlada automaticamente pela altura do terreno.

O veículo deve se mover a 20m/s (72km/h), o que significa que este deverá percorrer o mapa de um lado a outro em 25s.


Objetos Fixos

Os objetos que compõem o cenário devem ser lidos de arquivo, no formato TRI. O posicionamento dos objetos no arquivo deve ser realizado através de um arquivo que descreva seu posicionamento da seguinte forma:
Casa.tri     // Nome do arquivo
X1 Z1        // Posição onde deve ser colocado o ponto central da base do objeto
R1           // orientação ao redor do eixo Y
Xsize1 Ysize1 Zsize1  // tamanho dos eixos X, Y e Z
Arvore.tri
  
X2 Z2
R2
Xsize2 Ysize2 Zsize2 
Arvore.tri  // Este objeto não deve ser lido novamente de arquivo
X3 Z3
R2

Xsize3 Ysize3 Zsize3  // tamanho dos eixos X, Y e Z
Note que, quando um mesmo objeto for utilizado mais de uma vez, este não deve ser lido novamente de arquivo. Neste caso, deve ser criada uma nova instância do objeto.

O programa deve suportar pelo menos 10 objetos diferentes e 30 instâncias.

Ao ser colocado em uma certa posição (X,Z), a base do objeto deve ser assentada na altura do terreno neste ponto.


Visualização do Cenário

Deve ser possível observar o cenário em primeira e terceira pessoas.
Em primeira pessoa, a posição/orientação do observador são as mesmas do veículo.
Em terceira pessoa, deve ser possível escolher entre quatro pontos de vista e dois alvos. Um dos alvos é o centro do cenário e o outro o veículo. Os potos de vista em terceira pessoa devem ser tais que se possa observar todo o cenário.
A mudança destes pontos de vista deve ser feita através de teclas e pode ser ativa a qualquer momento.

FIM.



Itens Opcionais

Neste cenário o usuário deve controlar o movimento de um veículo que é capaz de lançar projéteis. Estes projéteis ao atingirem o terreno deverão destruir parte do terreno, abrindo um buraco.
O veículo permite o lançamento de projéteis quando se pressiona a tecla Espaço. O projétil deve ser lançado segundo a trajetória de uma bezier de 3 pontos, na direção apontada pela frente do veículo. A altura máxima da curva deve ser configurável.
Deve ser possível exibir e ocultar a curva Bezier a qualquer momento. A trajetória do projétil deve levar 20 segundos.
O carro deve continuar a se mover enquanto o projétil viaja. Deve ser possível atirar novamente enquanto um projétil está se movendo.