portais renderizáveis em 3d omar mahmoud abou ajoue ... cef/mac499-09/monografias/omar/ · dentre
Post on 21-Jan-2019
217 views
Embed Size (px)
TRANSCRIPT
Portais Renderizveis em 3D
Omar Mahmoud Abou Ajoue
Orientador:
Marcel Jackowski
1. Introduo
Motivao
Ao longo de nossa graduao, ns compartilhamos um interesse comum pelo
desenvolvimento de jogos. Sempre fomos fs de jogos eletrnicos desde crianas e
sempre tivemos a curiosidade sobre como estes jogos funcionavam. Esta
curiosidade foi um dos motivos que nos fez optar pelo curso de cincias da
computao.
Dentre os jogos que gostamos, um dos quais mais nos fascinou foi um jogo
chamado Portal, criado pela produtora Valve, lanado para PC e Xbox 360 em 2007.
A jogabilidade presente neste ttulo nica, e os desafios a serem superados em
cada fase nos mantinham presos ao jogo por horas. Portal foi aclamado como um
dos jogos mais originais de 2007.
Portal um jogo de puzzle para um nico jogador em primeira pessoa. Isto
significa que o jogador deve resolver quebra cabeas para passar das fases,
enquanto movimenta seu personagem com uma viso em primeira pessoa.
O jogador possui uma arma que pode utilizar para ajud-lo a resolver os quebra
cabeas. A nica funo desta arma a de criar portais nas paredes do mundo 3D,
que so utilizados pelo jogador para acessar diversas localidades, grande parte
delas inacessveis pela movimentao convencional do personagem (como grandes
alturas, por exemplo, ou obstculos).
A criao dos portais dada por comandos do mouse, com cliques dos botes
esquerdo e direito. Cada boto cria um portal, que no jogo original, possuem borda
colorida em azul e laranja para diferenci-los. Ao acionar novamente os botes, o
portal da cor correspondente trocado pela nova localizao. Os portais criados
desta forma criam um sistema de entrada e sada. Ao atravessar um dos portais, o
jogador levado posio do outro portal. Esta transio feita de modo suave, e
o jogador realmente sente como se estivesse atravessando uma janela at o outro
lado. Pode-se inclusive ficar parado no meio, entre os dois portais.
Figura 1: Viso de portais no jogo Portal
Alm do tele transporte, os portais possuem um efeito visual muito interessante. Ao
olhar atravs do portal, o jogador consegue observar com perfeio o mundo do
outro lado, como se estivesse de fato vendo a sada do portal correspondente do
par azul-laranja. Se posicionados corretamente, os portais permitem que o jogador
se veja atravs deles. Outro efeito interessante ocorre quando os dois portais so
colocados um em frente ao outro. O efeito resultante o mesmo que ocorre quando
ficamos entre dois espelhos, quando h impresso de uma profundidade infinita.
Figura 2: Viso atravs do portal azul da Fig. 1
Figura 3: Viso atravs do portal laranja da Fig. 1
Todas estas caractersticas deste jogo despertaram grande curiosidade.
Inicialmente, era desejado entender como seria feita a ligao entre os portais.
Chegamos a imaginar solues completamente impraticveis, como clonar o
ambiente 3D e coloc-lo atrs de cada portal.
Decidimos explorar esta curiosidade e desenvolver a nossa prpria soluo para o
problema. O trabalho de concluso de curso a verso de uma implementao
deste tipo de portais. No do conhecimento dos integrantes se as solues
encontradas so as mesmas dos desenvolvedores do jogo original, mas
acreditamos que conseguimos construir uma ferramenta de criao de portais
satisfatria, que pode ser utilizada pra criar um jogo com cenrios to divertidos
quanto alguns dos cenrios do Portal.
Objetivos
Nosso objetivo implementar um jogo 3D em primeira pessoa, que permita ao
jogador criar portais com propriedades similares s do jogo Portal.
Para a concretizao deste objetivo, h diversas tarefas e empecilhos a cumprir.
Iniciaremos expondo os problemas que encontramos e daremos a seguir as
solues.
Problemas
A criao do nosso jogo envolve vrios problemas, alguns deles no relacionados
diretamente criao dos portais. Estes problemas so:
Criar um mundo 3D a ser explorado pelo jogador;
Criar uma cmera que d ao jogador a iluso de estar dentro de um
personagem 3D, animado e que se movimenta de acordo;
Prover ao jogador meios de controlar esta cmera satisfatoriamente e
atualizar a posio e a rotao do personagem de acordo;
Criar mecanismos de coliso para este personagem com os objetos do
mundo 3D e com os portais;
Criar uma fsica bsica, que aplique gravidade ao personagem;
Permitir ao jogador escolher pontos nas paredes do mundo 3D onde ele
deseja criar os portais;
Criar os portais nos pontos escolhidos pelo jogador, orientados
corretamente, independentemente das paredes escolhidas;
Impedir a criao de portais em paredes onde eles no cabem;
Permitir a visualizao atravs dos portais, incluindo as visualizaes
recursivas (portais dentro de portais) e uma boa noo de perspectiva;
Permitir a travessia dos portais.
Alm disso, nos propomos a criar pelo menos um quebra cabea a ser resolvido
pelo jogador, utilizando os portais.
2. Conceitos e tecnologias estudadas
A biblioteca Irrlicht
A primeira tarefa necessria para a realizao deste trabalho era o entendimento
do funcionamento de uma mquina grfica 3D, ou seja, conceitos de computao
grfica precisavam ser entendidos.
Juntamente necessidade de entendimento na rea de computao grfica,
imediatamente surgiu tambm a necessidade de relembrar todos os conceitos
estudados em lgebra linear, j que esto totalmente relacionados.
Utilizamos, como ferramentas, uma engine grfica chamada Irrlicht, que realizava
toda a interface com OpenGL e automatizava o processo para renderizao para
ns, permitindo assim que nos focssemos na soluo dos problemas relacionados
a portais e facilitando a parte grfica.
Dos problemas que citamos acima, a engine sozinha no era capaz de solucionar
nenhum, porm, era capaz de prover um arcabouo de ferramentas para esta
realizao. Assim, vamos explicar o que era exigido de ns e a soluo que
utilizamos para resolver cada problema.
A engine era capaz de prover:
Facilidade na manipulao da cmera, alm de um grande arcabouo
vetorial, extenso e muito bem documentado
Criao de uma cmera em primeira pessoa sem a existncia de um
personagem atrelado a ela
Facilidade na realizao de renderizaes a texturas, uma tcnica que ser
explicada adiante e indispensvel realizao do trabalho
Possibilidade de carregamento de masmorras pr-montadas em programas
especficos, alm de modelos 3D, como o personagem e o labirinto em que
o jogador ser colocado
Resposta a eventos de mouse e teclado
Coliso bsica com objetos identificados como "paredes", junto de uma
gravidade superficial
Fcil acesso posio e rotao dos objetos, por intermdio de mtodos em
classes bem estruturadas, programadas em C++
lgebra Linear
Para a soluo dos problemas, ser necessrio ter boa noo acerca dos produtos
vetoriais e produtos escalares entre vetores, e sua respectiva idia de resultado.
Vamos relembrar sucintamente o que cada um destes produtos indica.
O produto vetorial uma operao binria entre dois vetores que tem como
resultado um outro vetor, perpendicular ao plano formado pelos dois primeiros
vetores e com direo dada pela regra da mo direita.
J o produto escalar a operao binria entre dois vetores cujo resultado um
escalar que indica, de certa forma, a relao angular entre os vetores.
Apresentado o arcabouo que temos e o que nos falta fazer, vamos s atividades
realizadas, com as respectivas tcnicas envolvidas.
Atividades realizadas
Criao de um mundo bsico
O primeiro passo foi conseguir ter um modelo bsico de um mundo explorvel
utilizando a biblioteca da engine Irrlicht. A documentao relacionada a esta
biblioteca bastante extensa e muito bem detalhada, o que facilitou bastante a
criao de um incio: um mundo 3D j consagrado no ttulo da srie Quake estava
pronto nossa disposio, necessitando apenas poucas linhas de comando para ter
um simples labirinto e as funcionalidades bsicas de movimentao.
A movimentao dos personagens
A movimentao toda controlada pela biblioteca, pois esta nos fornece uma
interface de manipulao de eventos, mas daremos uma breve idia de como
dada a movimentao da cmera pelo cenrio.
A entrada dada pela "interface wasd", j conhecida nos jogos em primeira pessoa,
em que o W move para frente, A para esquerda, S para trs e D para a direita.
O acionamento dos botes W ou S incrementa ou decrementa, respectivamente, a
posio atual por um fator do vetor target da cmera, que indica para onde a
cmera est olhando.
J os botes A e D realizam um deslizamento lateral, obtido por uma multiplicao
entre o vetor resultante do produto vetorial entre o vetor target e o vetor up da
cmera, sendo que este ltimo indica o que o lado de cima no mundo para a
cmera.
Desta forma, conseguimos realizar a movimentao via teclado. A rotao dada
pelo movimento do mouse, em que os movimentos horizontais realizam rotaes
no eixo X e os movimentos verticais realizam rotaes no eixo Y. Para calcular a
rotao da cmera pelo mouse, obtemos a posio do cursor na tela no frame atual
e a comparamos com a posio do cursor no frame anterior, obtendo o ngulo de
rotao que deve