Professional Documents
Culture Documents
JOÃO PESSOA
2008
HUGO IMPERIANO NÓBREGA
PROJETO FINAL
LABIRINTO VIRTUAL
JOÃO PESSOA
2008
Sumário
Sumário
1 Introdução
............................................................................................... 1
1.1 Apresentação
.................................................................................... 1
1.2
Objetivos........................................................................................... 1
2 Ferramentas
............................................................................................ 2
2.1 OpenGL
............................................................................................ 2
2.2 Blender e Wavefront
.......................................................................... 3
3 Etapas de Desenvolvimento
.................................................................... 3
3.1 Importador
........................................................................................ 3
3.2 Interação
.......................................................................................... 4
3.21 Movimentação
........................................................................ 5
3.21 Detecção de Colisão
............................................................... 7
3.3 Modelagem
....................................................................................... 9
3.4 Aplicação
......................................................................................... 10
4 Resultados
............................................................................................. 11
5 Conclusão
.............................................................................................. 13
6 Bibliografia
............................................................................................ 14
1. Introdução
1.1 Apresentação
Os ambientes virtuais têm inúmeras aplicações, que vão desde uso em atividades
científicas até o uso em áreas de lazer, como jogos e animações para cinema.
Existem também, diversos enfoques que podem ser dados na criação de um ambiente
virtual, podendo ser um enfoque mais específico como a criação de um jogo em cima de um
engine já existente ou o desenvolvimento de uma plataforma que serviria para criação de
outras aplicações.
Neste trabalho, abordamos um pouco do desenvolvimento mais abrangente e criamos
uma aplicação-exemplo para implementar as funcionalidades criadas.
1.2 Objetivos
Este projeto tem por objetivo, além da aplicação dos conhecimentos adquiridos no
decorrer da disciplina de Introdução à Computação Gráfica, a criação de um ambiente
virtual. Mais especificamente, pode-se dizer, que o objetivo deste trabalho é o
desenvolvimento de um ambiente juntamente com um conjunto de funcionalidades que
tornem este ambiente genérico, no sentido de estar apto a servir como base para várias outras
aplicações, como por exemplo, diferentes tipos de jogos. Para demonstrar as funcionalidades,
optou-se por criar uma espécie de labirinto.
2. Ferramentas
2.1 OpenGL
“A OpenGL (Open Graphical Library) pode ser definida como uma inferface de
software (API – Aplication Program Interface) para aceleração gráfica de dispositivos
gráficos” [1].
Foi com o uso desta biblioteca de funções, além da GLU (OpenGL Utility) e da
GLUT (OpenGL Utility Toolkit) , em cima da linguagem de programação C, que se
desenvolveu esta aplicação.
Da OpenGL, incluindo GLU e GLUT, foi utilizado:
• Dois buffers de desenho, para que houvesse uma maior agilidade para renderizar os
objetos.
• Detph Buffer, que implementa o algoritmo do Z-Buffer, para testes de profundidade.
• Modelo de iluminação de Gouraud e funções para aplicação de materiais.
• Funções para criação e configuração da janela de visualização, viewport, projeção.
• Funções para interação via mouse/teclado.
• Criação do importador
• Criação de interação com o ambiente
• Modelagem
• Criação da aplicação
3.1 Importador
Devido à necessidade de utilizar modelos de certa complexidade, optou-se por
desenvolver um importador que à partir de objetos modelados em algum programa que
oferecesse maiores facilidades para esta tarefa, conseguisse montar esses objetos por meio da
OpenGL.
Inicialmente, optou-se por criar um importador baseado em arquivos da linguagem
VRML (Virtual Reality Modelling Language), na sua versão 1.0, que possibilita o
desenvolvimento de ambientes tridimensionais estáticos[2]. Entretanto, encontrou-se
dificuldade em relação às normais, das faces dos objetos no formato VRML, pois
aparentemente elas não estavam contidas nos arquivos dos objetos, de forma que foi
necessária a criação de uma função para à partir das faces do objeto, determinar as normais
destas faces. Entretanto, para usar o Modelo de Sombreamento de Gouraud, que necessita-se
das normais de vértice[1], eram necessários cálculos extras, de forma que optou-se por usar o
tipo de arquivo WAVEFRONT, de formato obj, que fornece as normais para todos os
vértices.
Na criação deste novo importador, foram usadas as estruturas de dados já criadas para
o primeiro importador, de modo que fossem guardados os pontos (vértices), as normais, as
faces e os objetos. Foi criada uma hierarquia baseada no fato de que um objeto contém faces
e estas por sua vez contêm vértices e normais para estes vértices.
3.2 Interação
3.2.1 Movimentação
Devido aos testes serem separados, a movimentação paralela à uma parede, por
exemplo, é ainda permitida no caso de o observador estar “encostado” nessa parede.
Após alguns testes, entretanto, notou-se que havia o problema de ficar travado em
algumas situações em que observador próximo ás quinas andasse rente à parede. Para
resolver isto, foi criado mais um teste após os citados acima. Esse teste verifica se a distância
à posição no eixo na direção do qual deseja mover-se (posx ou posz) sem o acréscimo da
quantidade que deseja-se andar à posição nesse eixo (X ou Z) é maior do que a distância
dessa posição acrescentada da quantidade que deseja-se andar, pois nesse caso, está
confirmada a colisão. Caso contrário, então considera-se que não há colisão, pois o
observador estaria se afastando da parede, por exemplo.
Foi também desenvolvido o teste de colisão para objetos os quais de deseja poder
atravessar, que é único para os dois movimentos (em X e Z). Ele tem semelhanças com as
funções acima, mas é mais simples, visto que importa apenas a posição atual sem nenhum
acréscimo ou decréscimo.
3.3 Modelagem
Como dito na seção 2, foi usado o Blender para a modelagem dos objetos e
exportação para o formato Wavefront. Os quais foram:
• Labirinto
• Esferas
• Porta da saída do labirinto
3.4 Aplicação
Utilizando o que foi feito nas etapas anteriores, importou-se o labirinto a porta de
saída e as esferas. Onde ao labirinto e à porta, foi aplicada a detecção de colisão em X e em
Z e às esferas, foi aplicada a colisão que permite atravessar às esferas.
A detecção de colisão da forma como foi organizada, teve a intenção de que o
observador tenha de atravessar o labirinto, que inicialmente tem apenas um acesso ao
mundo exterior, que é a entrada. No decorrer do percurso no labirinto, o usuário deverá
encontrar quatro esferas douradas para depois disso a porta do labirinto apareça, liberando
assim a saída.
Mapa do labirinto.
4. Resultados
5. Conclusão
Por fim, chega-se à conclusão de que dentro dos objetivos traçados houve um nível
satisfatório de êxito, tendo em vista que se consegui criar uma aplicação-exemplo em cima
das funções de interação que tiveram um nível razoável de generalidade.
Dessa forma, poder-se-á usar essas funções desenvolvidas para outras aplicações
futuras.
6. Bibliografia
[1] Azevedo, E.; Conci, A. Computação Gráfica - Teoria e Prática; Campus, 2004.
[2] FV de Araújo, AZ Cordenosi, CU Franciscano – tise.cl
Hearn, D.; Baker. Computer Graphics with OpenGL. Prentice Hall, 2003.
Woo, M.; Neider, J.; Davis, T.; Shreiner, D. OpenGL Programmin Guide, 3a edição. Addison
Wesley 1999.