Pontifícia Universidade de Católica do Rio Grande do Sul
Faculdade de Informática
Computação Gráfica
2000/I - Trabalho I
O trabalho deverá ser desenvolvido em grupos de 2 pessoas.
O programa deverá ler de disco um mapa de uma cidade e exibir em uma de suas ruas um carro que sairá andando pelas ruas em linha reta até encontrar um sinal de conversão.
O mapa é formado por ruas. Estas ruas são descritas em arquivos-texto, através de seus pontos extremos. No inicio de um arquivo de mapa há sempre dois pares de coordenadas (X,Y ) que definem um retângulo que engloba o mapa. No mapa devem ser colocados também os pontos onde há conexões (esquinas) entre duas ruas. Numa esquina há sempre apenas e ruas. Após as esquinas aparecem as posições das casas do mapa. A posição de cada casa é dada pela rua e pela posição dentro da rua. O desenho da casa da casa pode ser pré-definido.
#ENVELOPE 100 100 // define o canto inferior esquerdo 500 300 // define o canto superior direito #RUAS 3 // Quantidade de ruas 200 200 300 200 // define uma rua (0) 250 200 250 250 // define uma rua (1) 300 150 300 200 // define uma rua (2) 300 150 480 150 // define uma rua (3) #ESQUINAS 3 // Quantidade de esquinas 0 1 250 200 // define uma esquina entre as ruas 0 e 1, na posição 250 200 0 2 300 200 // define uma esquina entre as ruas 0 e 2, na posição 300 200 2 3 300 150 // define uma esquina entre as ruas 0 e 1, na posição 300 150 #CASAS 2 // Quantidade de casas 3 E 0.5 Armazem.obj // casa no meio (0.5) da rua 3, do lado esquerdo 2 D 0.2 PostoDeSaude.obj // casa no início (0.2) da rua 2, do lado direito
Figura - Exemplo de mapa
O posicionamento das casas nas ruas poder feito usando a idéia
de reta paramétrica.
Não haverá esquinas em forma de cruzamentos.
Não devem ser exibidas coordenadas.
O carro deverá ser exibido sobre as ruas e andará sempre ao
logo da rua em que estiver. Se chegar ao final dela, deverá "bater e
voltar". O carro só mudará sua direção se encontrar um sinal de
conversão ou se chegar ao fianl de uma rua. A existência de uma esquina não obriga o carro a mudar de
direção.
No início da execução do programa o usuário deverá clicar sobre uma rua
para posicionar o carro que deverá começar a andar sobre ela em qualquer
direção. O carro deverá ser rotacionado.
Figura - Exemplo de Carro
Deverá existir apenas um modelo de carro. Os desenhos de carros em direções diferentes da original devem ser implementadas usando os comandos de rotação de OpenGL.
O usuário poderá "carimbar" sinais de conversão
sobre as ruas e esquinas. Deverá haver uma "área de
tolerância" dentro da qual o ponto clicado será considerado válido. Ou
seja, não é preciso clicar exatamente sobre a rua ou no ponto exato da
esquina.
Ao passar sobre um sinal de conversão nas esquinas o carro faz a conversão e
entra em outra rua.
Ao passar sobre um sinal de conversão no meio de uma rua o carro pode
entrar em
uma casa se ela existir naquele ponto. Se não existir uma casa, o comando deverá
ser ignorado.
Figura - Sinais de Conversão
Figura - Exemplo de Sinal de Conversão sobre uma esquina
Estes sinais de conversão deverão aparecer em algum lugar na tela (fora do mapa) e o usuário deverá clicar sobre ele e depois sobre uma rua ou esquina. No momento que um carro passar sobre um sinal de conversão este sinal deverá desaparecer do mapa.
Estes sinais deverão instâncias de um mesmo modelo. Não deverá haver uma descrição para cada um deles
O programa deverá permitir que o usuário execute comandos de Zoom e Unzoom sobre o mapa. A cada zoom/unzoom o ponto central do mapa deve continuar no centro da tela.
Além disto deve ser possível deslocar a janela para esquerda, direita, acima e abaixo sem alterar o tamanho da janela de seleção. Estes são os comandos de PAN.
Este comandos pode ser implementados com teclas. Por exemplo, + e - para zoom e unzoom e as setas para o PAN.
O programa deverá ser implementado usando OpenGL para a parte de exibição gráfica e geração das instâncias.
Os trabalhos que implementarem ruas inclinadas ganharão um ponto-extra na avaliação do trabalho.
Os trabalhos que implementarem ruas em forma de curvas paramétricas ganharão dois ponto-extras na avaliação do trabalho.