Construindo Ambientes com Realidade Aumentada Utilizando Sistemas de … · de Assun¸c˜ao,...
-
Upload
duongkhuong -
Category
Documents
-
view
212 -
download
0
Transcript of Construindo Ambientes com Realidade Aumentada Utilizando Sistemas de … · de Assun¸c˜ao,...
UNIVERSIDADE FEDERAL DE GOIAS – UFG
CAMPUS CATALAO – CaC
DEPARTAMENTO DE CIENCIA DA COMPUTACAO – DCC
Bacharelado em Ciencia da Computacao
Projeto Final de Curso
Construindo Ambientes com Realidade AumentadaUtilizando Sistemas de Partıculas
Autor: Fabio Gomes de Assuncao
Orientador: Marcio Antonio Duarte
Catalao - 2008
Fabio Gomes de Assuncao
Construindo Ambientes com Realidade Aumentada Utilizando Sistemas de
Partıculas
Monografia apresentada ao Curso de
Bacharelado em Ciencia da Computacao da
Universidade Federal de Goias Campus Catalao
como requisito parcial para obtencao do tıtulo de
Bacharel em Ciencia da Computacao
Area de Concentracao: Computacao Grafica
Orientador: Marcio Antonio Duarte
Catalao - 2008
de Assuncao, Fabio G.
Construindo Ambientes com Realidade Aumentada Utilizando Sistemas
de Partıculas/Marcio Antonio Duarte- Catalao - 2008
Numero de paginas: 87
Projeto Final de Curso (Bacharelado) Universidade Federal de Goias, Campus
Catalao, Curso de Bacharelado em Ciencia da Computacao, 2008.
Palavras-Chave: 1. Realidade Virtual. 2. Realidade Aumentada. 3. Sistemas de
Partıculas
Fabio Gomes de Assuncao
Construindo Ambientes com Realidade Aumentada Utilizando Sistemas de
Partıculas
Monografia apresentada e aprovada em de
Pela Banca Examinadora constituıda pelos professores.
Marcio Antonio Duarte – Presidente da Banca
Alexsandro Santos Soares
Selma Teresinha Milagre
Dedico este trabalho aos meus pais. Que tanto me
estimularam ao longo do curso, desde a aprovacao no
vestibular ate este momento de integralizacao. Essa con-
quista tambem e de voces!
AGRADECIMENTOS
Acima de todos, a Deus. Minha fortaleza, meu guia. Por iluminar meus passos com
sua protecao e sabedoria. Mostrando-me o caminho correto a seguir.
Aos meus pais, Antonio e Sidarly. Pela educacao que me foi concedida, pelo apoio que
me foi fornecido. Pelos conselhos que me foram dados, para que eu pudesse chegar ate
aqui. E especialmente pelo amor que me foi doado, me ensinando a cultivar as pessoas
ao meu redor.
Ao meu irmao Ricardo, pela ajuda na hora de fazer escolhas, nao apenas pela opiniao,
mas tambem pela experiencia.
Aos amigos, que estiveram junto a mim, me encorajando para enfrentar os desafios.
Sempre com discurso de motivacao no inıcio de uma nova caminhada. Gostaria de falar
de muitos, se possıvel todos, mas em especial, nao posso deixar de citar estes poucos:
Jeferson Diniz, Jaqueline e Renata Guimaraes, Claudeir Germano e Natasha Pimentel.
Aos colegas da graduacao, que na maioria das vezes ajudaram de forma nobre. Riram
comigo nos momentos de descontracao. Brigaram comigo nos momentos de tensao. Estu-
daram comigo nos momentos de dedicacao e agora, lutam junto comigo pelos seus tıtulos
de bachareis neste momento de conclusao.
Destes, em especial, agradeco a Mirian e Andrea Alves que se tornaram verdadeiras
companheiras ao longo dessa jornada. E desde ja digo: Nao importa que estrada esco-
lhamos para trilhar, quais caminhos iremos seguir daqui em diante, o que importa e o
sentimento que ja se concretizou, e que agora me ensina o significado da palavra amizade.
Aos colegas de curso, que embora nao estivessem sempre por perto, apareciam de al-
guma forma quando eu precisava. Agradeco os bons momentos compartilhados comigo.
Em especial Mayara Amaral, Marina Mendes, Rejane Gomes, Eduardo Ribeiro, Glenda
Botelho, Leonardo Garcia, Douglas Cordeiro, Adair Borba, Rosangela Alves, Marcia
Ribeiro, Lorena Teixeira, Amanda Cristina e Bruno Calcado.
Ao meu orientador professor Ms. Marcio Antonio Duarte, pela paciencia e dedicacao,
pelas risadas e pelas ponderacoes. Por toda a convivencia e experiencia oferecida durante
a elaboracao deste trabalho.
Aos outros mestres da graduacao, que sempre tinham a acrescentar de alguma forma
com suas colocacoes.
Enfim, a todas as pessoas, mestres e amigos, familiares e colegas, que de qualquer
forma, contribuıram para o meu crescimento profissional e pessoal, para minha formacao
e para minha vida. Obrigado.
“Ao tomar uma sabia decisao, nao olhes para tras.
Ao alcancar o tao desejado objetivo, lembre-se dos que
ficaram para tras. Ao vencer, ao final de uma grande
luta, nao abandone a quem la de tras torceu muito por
voce”.
Anonimo
RESUMO
de ASSUNCAO, F. G. Construindo Ambientes com Realidade Aumen-
tada Utilizando Sistemas de Partıculas. Curso de Ciencia da Computacao, Campus
Catalao, UFG, Catalao, Brasil, 2008, 87p.
Este trabalho apresenta a construcao de ambientes virtuais atraves de tecnicas de Real-
idade Virtual (RV) e Realidade Aumentada (RA)apresentando novas formas de interacao
atraves do uso de Sistemas de Partıculas (SP), visando conseguir maior aplicacao de sis-
temas de RA, pois, a maioria destes sistemas aumentam a realidade atraves da insercao
de objetos virtuais estaticos com intuito de complementar uma cena. Com o uso de SP
para modelagem de objetos virtuais, essas aplicacoes ganharam um novo proposito, ja
que a interacao direta do usuario com as informacoes virtuais garantida pelas tecnicas de
RV e RA agora se realizara com entidades virtuais que se encontram em constante movi-
mento. A adequacao destes metodos possibilita a construcao de aplicacoes naturalmente
mais interativas. Como resultado, foi implementado um sistema utilizando a biblioteca
ARToolKit, que permitiu o desenvolvimento de aplicacoes de RA, e para modelagem dos
SP, utilizou-se OpenGl.
Palavras-Chaves: Realidade Virtual, Realidade Aumentada, Sistemas de Partıculas
i
Sumario
1 Introducao 1
1.1 Motivacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Organizacao da Monografia . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 A Realidade Virtual 6
2.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Historico da Realidade Virtual . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Caracterizacao da Realidade Virtual . . . . . . . . . . . . . . . . . . . . . 9
2.4 Sistemas de Realidade Virtual . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4.1 Sistemas Imersivos e Sistemas Nao Imersivos . . . . . . . . . . . . . 10
2.4.2 Sistemas de Telepresenca . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4.3 Sistemas Mistos - Imagens Reais e Imagens Virtuais . . . . . . . . . 11
2.4.4 Sistemas Distribuıdos e Sistemas Centralizados . . . . . . . . . . . 11
2.5 Dispositivos de Realidade Virtual . . . . . . . . . . . . . . . . . . . . . . . 12
2.5.1 A Visao e a Tridimensionalidade . . . . . . . . . . . . . . . . . . . . 12
2.5.2 Dispositivos para Visualizacao . . . . . . . . . . . . . . . . . . . . . 12
2.5.3 Dispositivos de Rastreamento . . . . . . . . . . . . . . . . . . . . . 14
2.5.4 Luvas Digitais e o Tato Virtual . . . . . . . . . . . . . . . . . . . . 14
2.5.5 Dispositivos Acusticos . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.5.6 Dispositivos para Sistemas Baseados em Projecao . . . . . . . . . . 15
2.6 Aplicacoes da Realidade Virtual . . . . . . . . . . . . . . . . . . . . . . . . 15
2.6.1 Arquitetura e Projeto . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.6.2 Aplicacoes Medicas e na Area de Saude . . . . . . . . . . . . . . . . 16
2.6.3 Treinamento Profissional . . . . . . . . . . . . . . . . . . . . . . . . 16
2.6.4 Tratamento de Fobias . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.6.5 Area de Industria e Tecnologia . . . . . . . . . . . . . . . . . . . . . 17
2.6.6 Entretenimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.6.7 Telepresenca e Teleoperacao . . . . . . . . . . . . . . . . . . . . . . 18
ii
3 A Realidade Aumentada 19
3.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2 A Realidade Misturada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.3 Caracterizacao da Realidade Aumentada . . . . . . . . . . . . . . . . . . . 20
3.4 Tipos de Sistemas de Realidade Aumentada e Seus Dispositivos . . . . . . 21
3.4.1 Sistemas Imersivos e Sistemas Nao imersivos . . . . . . . . . . . . . 22
3.4.2 Sistemas de Visao Otica Direta . . . . . . . . . . . . . . . . . . . . 22
3.4.3 Sistemas de Visao Direta por Vıdeo . . . . . . . . . . . . . . . . . . 23
3.4.4 Sistemas de Visao por Vıdeo Baseada em Monitores . . . . . . . . . 23
3.4.5 Sistemas de Visao Otica por Projecao . . . . . . . . . . . . . . . . . 24
3.5 Componentes de um Sistema de Realidade Aumentada . . . . . . . . . . . 24
3.5.1 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.5.2 Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.6 Realidade Aumentada x Realidade Virtual . . . . . . . . . . . . . . . . . . 25
3.7 Aplicacoes da Realidade Aumentada . . . . . . . . . . . . . . . . . . . . . 26
3.7.1 Aplicacoes Moveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.7.2 Aplicacoes Colaborativas . . . . . . . . . . . . . . . . . . . . . . . . 26
3.7.3 Aplicacoes Comerciais . . . . . . . . . . . . . . . . . . . . . . . . . 27
4 Os Sistemas de Partıculas 28
4.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.2 Historico dos Sistemas de Partıculas . . . . . . . . . . . . . . . . . . . . . . 29
4.3 Caracterizacao dos Sistemas de Partıculas . . . . . . . . . . . . . . . . . . 30
4.4 O Que e Uma Partıcula? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.4.1 Os Atributos de Uma Partıcula . . . . . . . . . . . . . . . . . . . . 31
4.4.2 Simulacao das Partıculas . . . . . . . . . . . . . . . . . . . . . . . . 33
4.5 Gerando e Visualizando Imagens com Sistemas de Partıculas . . . . . . . . 34
4.6 Tipo de Sistemas de Partıculas . . . . . . . . . . . . . . . . . . . . . . . . 35
4.6.1 Sistemas de Partıculas Estocasticos . . . . . . . . . . . . . . . . . . 35
4.6.2 Sistemas de Partıculas Estruturados . . . . . . . . . . . . . . . . . . 35
4.6.3 Sistemas de Partıculas Dirigidos . . . . . . . . . . . . . . . . . . . . 36
4.7 Vantagens dos Sistemas de Partıculas . . . . . . . . . . . . . . . . . . . . . 36
4.8 Aplicacoes dos Sistemas de Partıculas . . . . . . . . . . . . . . . . . . . . . 36
5 Tecnologias Relacionadas e Arquitetura Proposta 38
5.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.2 O Software ARToolKit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.2.1 Historico do ARToolKit . . . . . . . . . . . . . . . . . . . . . . . . 39
iii
5.2.2 Alinhamento “Real x Virtual”com Cartoes Marcadores . . . . . . . 39
5.2.3 Funcionamento do ARToolKit . . . . . . . . . . . . . . . . . . . . . 40
5.2.4 Desenvolvimento de Aplicacoes Utilizando ARToolKit . . . . . . . . 41
5.2.5 Versoes do ARToolKit . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.3 A OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.3.1 Historico da OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.3.2 O que e a OpenGL? . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.3.3 Funcionamento da OpenGL . . . . . . . . . . . . . . . . . . . . . . 44
5.3.4 Utilizacao/Insercao de Bibliotecas OpenGL . . . . . . . . . . . . . . 44
5.3.5 Sistemas de Partıculas em OpenGL . . . . . . . . . . . . . . . . . . 45
5.4 Arquitetura Proposta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.4.1 Modulo ARToolKit . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.4.2 Modulo Gerador de Objetos Virtuais . . . . . . . . . . . . . . . . . 47
5.4.3 Submodulo Atualizador . . . . . . . . . . . . . . . . . . . . . . . . . 47
6 Implementacao, Resultados e Discussao 48
6.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.2 Alteracoes no Software ARToolKit . . . . . . . . . . . . . . . . . . . . . . 48
6.3 Geracao dos Objetos Virtuais . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.4 Cartao Marcador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.5 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
6.5.1 Sistemas de Partıculas Simples . . . . . . . . . . . . . . . . . . . . 53
6.5.2 Sistemas de Partıculas Junto com Cenario . . . . . . . . . . . . . . 54
6.5.3 Sistemas de Partıculas Interativos e Agregados . . . . . . . . . . . . 55
6.5.4 Multiplos Sistemas de Partıculas . . . . . . . . . . . . . . . . . . . 56
6.5.5 Multiplos Sistemas de Partıculas com Interacao do Usuario . . . . . 58
6.5.6 Tipo de Sistema de Realidade Aumentada . . . . . . . . . . . . . . 59
6.5.7 Metodos para Modelagem dos Sistemas de Partıculas . . . . . . . . 60
6.5.8 Detalhes da Implementacao . . . . . . . . . . . . . . . . . . . . . . 61
6.6 Limitacoes e Discussao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.6.1 Iluminacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.6.2 Visao da Camera . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.6.3 Rastreamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
6.6.4 Renderizacao e Escala . . . . . . . . . . . . . . . . . . . . . . . . . 62
6.6.5 Discussao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
7 Consideracoes Finais 64
7.1 Conclusoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
iv
7.2 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Referencias 67
Apendices 69
A Codigo Fonte 70
A.1 Fonte Aquatica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
A.2 Nave Espacial com Interacao . . . . . . . . . . . . . . . . . . . . . . . . . . 79
v
Lista de Figuras
1.1 Ambiente com RA [Duarte, 2006] . . . . . . . . . . . . . . . . . . . . . . . 2
2.1 Sensorama Desenvolvido por Morton Heiling [Oliveira, 2006] . . . . . . . . 8
2.2 Usuario com Capacete Desenvolvido por Sutherland em 1968 [Oliveira, 2006] 8
2.3 Nasa View: Sistema de Simulacao da NASA [Duarte, 2008] . . . . . . . . . 9
2.4 “I3”da RV [Duarte, 2008] . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5 Sistema de Telepresenca [Guanabara, 2007] . . . . . . . . . . . . . . . . . . 11
2.6 Aplicacao de RM para Remocao de Tumores [Oliveira, 2006] . . . . . . . . 11
2.7 Oculos Estereoscopicos e Tela de Projecao [Kirner et al., 2006] . . . . . . . 13
2.8 Sistema Imersivo com Capacete e Luvas [Kirner et al., 2006] . . . . . . . . 13
2.9 Elementos de uma Luva Digital [Tori et al., 2006] . . . . . . . . . . . . . . 14
2.10 Estadio Jornalista Mario Filho no Rio de Janeiro e Sua Maquete Virtual . 16
2.11 Exemplo de Projeto Simulado por RV [Deultz, 2008] . . . . . . . . . . . . . 17
2.12 Tela de Jogo Desenvolvido para Plataforma PlayStation 3 [MCO, 2008] . . 18
3.1 Diagrama Realidade x Virtualidade [Milgran, 1994] . . . . . . . . . . . . . 20
3.2 Objetos Virtuais Posicionados Sobre Mesa Real [Tori et al., 2006] . . . . . 21
3.3 Sistemas Imersivos x Sistemas Nao Imersivos [Kirner et al., 2006] . . . . . 22
3.4 Diagrama do Sistema de Visao Otica Direta [Duarte, 2006] . . . . . . . . . 23
3.5 Diagrama do Sistema de Visao Direta por Vıdeo [Duarte, 2006] . . . . . . 23
3.6 Diagrama do Sistema de Visao por Vıdeo Baseada em Monitores [Zorzal, 2008] 24
3.7 Diagrama Artificialidade x Espaco [Kirner et al., 2006] . . . . . . . . . . . 26
4.1 SP de Fogo do Filme Star Thek II: The Wrath of Khan [Reeves, 1985] . . . 30
4.2 Arquitetura do SP de Explosao de Reeves [Oliva, 2004] . . . . . . . . . . . 32
4.3 Explosao de Fogos Multicolorados Modelada por SP [Reeves, 1985] . . . . 34
4.4 Simulacao de Fluidos Atraves de SP: Colisao com Corpo Solido [Oliva, 2004] 37
5.1 Processamento da Imagem Capturada . . . . . . . . . . . . . . . . . . . . . 40
5.2 Diagrama de Funcionamento do ARToolKit [Consularo et al., 2005] . . . . 41
5.3 Diagrama de Funcionamento da OpenGL [Manssour, 2008] . . . . . . . . . 44
5.4 Arquitetura Proposta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
vi
6.1 Inversao da tela do ARToolKit . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.2 Modelagens em OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.3 Cartao Marcador [Kirner, 1999] . . . . . . . . . . . . . . . . . . . . . . . . 53
6.4 SP de tornado - Primeiro Resultado . . . . . . . . . . . . . . . . . . . . . . 53
6.5 SP de tornado - Resultado Final . . . . . . . . . . . . . . . . . . . . . . . . 54
6.6 SP de Agua - Cenario: Fonte Aquatica . . . . . . . . . . . . . . . . . . . . 55
6.7 SP de Agua - Cenario: Isqueiro . . . . . . . . . . . . . . . . . . . . . . . . 55
6.8 SP Agredados e Interativos . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6.9 SP de Estrelas - SP Interativo . . . . . . . . . . . . . . . . . . . . . . . . . 56
6.10 Multiplos SP de Fogo - Propulsores Nave Espacial . . . . . . . . . . . . . . 57
6.11 Multiplos SP com Dinamicas de Simulacao Diferentes . . . . . . . . . . . . 57
6.12 Controle de Renderizacao dos SP . . . . . . . . . . . . . . . . . . . . . . . 59
6.13 Sistema de RA Nao Imersivo de Visao por Vıdeo Baseada em Monitores . . 60
vii
Lista de Algoritmos
4.1 Possıvel Laco de Simulacao de um Sistema de Partıculas . . . . . . . . . . 34
viii
Lista de Codigos
5.3.1 Estrutura das Partıculas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.3.2 Partıculas Ativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.2.1 Codigo de Inversao de Tela . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.3.1 Metodo Generico iniciaParticulas . . . . . . . . . . . . . . . . . . . . . . . 50
6.3.2 Metodo Generico conceberParticulas . . . . . . . . . . . . . . . . . . . . . 51
6.3.3 Metodo Generico desenhaParticulas . . . . . . . . . . . . . . . . . . . . . . 52
6.3.4 Metodo Generico extinguirParticulas . . . . . . . . . . . . . . . . . . . . . 52
6.5.1 Alteracoes no Metodo keyEvent . . . . . . . . . . . . . . . . . . . . . . . . 58
ix
Lista de Siglas
3D Tridimensional
CG Computacao Grafica
GL Graphic Language
RA Realidade Aumentada
RV Realidade Virtual
RM Realidade Misturada
SO Sistema Operacional
SP Sistema(s) de Partıculas
VA Virtualidade Aumentada
FSG Fahrenheit Scene Graph
GLU Graphic Language Utility
GLX Graphic Language Extention
HMD Head Mounted Display
SGI Silicon Graphic Inc
GLUT Graphic Language Utility Toolkit
NASA National American Spacial Agency
VRML Virtual Reality Modeling Language
NURBS Non Uniform Rational B-Splines
OpenGL Open Graphic Language
ARToolKit Augmented Reality Tool Kit
x
Capıtulo 1
Introducao
1.1 Motivacao
Desde tempos pre-historicos, a sociedade manifestou a necessidade de representar
imaginacao e realidade. Prova disso, sao as pinturas primitivas encontradas em cavernas
e montanhas, feitas ha milhares de anos. Ao longo da historia, essa necessidade vem se
transformando desde simples pinturas ate grandes obras de teatro, jogos, cinema, musica
e outros meios de expressao. Essas expressoes ganharam forca com a introducao do uso
do computador, pois, os princıpios da multimıdia complementam a criacao de imagens,
sons e animacoes [Tori et al., 2006].
A Computacao Grafica (CG) e uma ferramenta de concepcao de arte. Essa ferramenta
permite transcender tecnicas tradicionais de modelagem, a partir da combinacao de luz,
tempo e movimento. Cabe ao criador imaginar o trabalho e deixar que a maquina resolva
a complexidade da criacao [Azevedo e Conci, 2004].
A CG e uma area que se integra a todas as outras ciencias, pois atraves dela e
possıvel alcancar a simulacao do universo real explicado cientificamente ou o fruto da
imaginacao humana, mesclando conhecimento e realidade para solucoes e conclusoes
[Tori et al., 2006].
A historia da computacao se alonga por mais de 50 anos, mas apenas ha algumas
decadas que avancos na area de CG ocorreram consideravelmente. A partir da decada
de 80, surgiram os conceitos de graficos em tres dimensoes (3D) e Realidade Virtual
(RV)[Vince, 1995].
A RV pode ser definida como a forma mais avancada de interface com o usuario de
computador disponıvel ate entao, pois, permite ao usuario a manipulacao, visualizacao e
interacao com computadores e dados de grande complexidade. A RV aparece como uma
abordagem para aumentar a interacao entre o mundor real e os modelos virtuais utilizados
nas simulacoes [Duarte, 2006].
1
Segundo Kirner, Tori e Siscoutto (2006), o avanco da multimıdia e da RV, propor-
cionado pela melhoria na potencia dos computadores, permitiu a integracao, em tempo
real, de vıdeo e ambientes virtuais interativos. Da mesma forma, o aumento da largura de
banda das redes de computadores tambem vem influenciando positivamente na evolucao
da multimıdia, permitindo a transferencia de fluxos de informacao, como imagens, com
eficiencia.
Mas o escopo da RV e limitado, por idealizar modelos e ambientes de cunho totalmente
virtual. Para integrar o ambiente real em que estamos e modelos virtuais, introduz-se uma
nova abordagem, a Realidade Aumentada (RA). A RA beneficiou-se desses progressos
obtidos no fluxo de informacoes, tornando viaveis aplicacoes dessa tecnologia, tanto em
plataformas sofisticadas quanto em plataformas populares [Kirner et al., 2006].
As tecnicas de RA, possibilitam aumentar uma cena real, capturada por camera ou
outro dispositivo, com elementos virtuais, tornando a cena mais rica. Visando a criacao
de aplicacoes interativas. Um bom exemplo, visualizar a decoracao, em tempo real, de
um apartamento vazio (no ambiente real em que estamos) com moveis virtuais.
E necessario que o usuario utilize dispositivos apropriados, para visualizar a cena real
enriquecida com os elementos virtuais posicionados e orientados pelo sistema em todo o
apartamento. As tecnicas de RA permitem que o mobiliario permaneca estatico em sua
posicao, mesmo que o usuario se movimente pelo apartamento, causando a sensacao que
os moveis realmente estejam ali. O usuario tem a possibilidade de manipular o cenario
criado sem o uso de mouse ou teclado [Duarte, 2006].
As tecnicas de mistura e sobreposicao da RA, abrangem um imenso campo de aplicacoes,
desde trabalhos de graduacao ate grandes empreendimentos nos mais diversos setores so-
ciais. A Figura 1.1, ilustra o uso da RA enriquecendo o ambiente real. Atraves deste
exemplo e possıvel imaginar como esse ambiente teria sido.
Figura 1.1: Ambiente com RA [Duarte, 2006]
Dessa forma, a RV e a RA, permitem ao usuario retratar e interagir com situacoes
imaginarias, como cenarios fictıcios, envolvendo objetos reais e virtuais, estaticos ou em
movimento [Kirner et al., 2006]. Permitem tambem, a reproducao com fidelidade, de
2
ambientes da vida real de forma a possibilitar ao usuario, navegar por tais ambientes e
interagir com seus recursos de forma natural, usando as maos, por exemplo, e agir neste
mundo fictıcio da mesma maneira que aconteceria no mundo real.
Segundo Duarte (2006), a maioria dos sistemas baseados em RA, limita-se, a inserir
informacoes estaticas no ambiente real, de forma a complementar uma cena com uma
dada informacao.
No entanto, algumas entidades do mundo virtual nao podem ser modeladas atraves
de primitivas geometricas simples ou disposicao de vertices no espaco, pois, cada uma
delas apresenta caracterısticas proprias de superfıcie e comportamento, especialmente se
tratando de uma entidade que se encontra em constante movimento no mundo virtual.
Tais como, modelagem de furacoes, chuva, agua, fumaca, fogo, multidoes, etc, ou
ate mesmo modelagens estaticas, como gramados, arvores, floresta, etc. Essas entidades
sao modeladas com o uso de Sistemas de Partıculas (SP), pois, cada partıcula tem suas
propriedades para formar um dado objeto como um todo [Reeves, 1985].
Com o desenvolvimento dos campos de aplicacao da CG, surgiu a necessidade de
modelagem de objetos nao determinısticos, ou simplesmente, objetos cuja superfıcie nao
poderia se compor continuamente com polıgonos, por conta da aleatoriedade das pro-
priedades de cada objeto [Azevedo e Conci, 2004]. Para modelagem virtual de objetos
deste escopo, Willian T. Reeves propos os Sistemas de Partıculas (SP).
Reeves (1985) propos que, um SP consiste em uma colecao de partıculas virtuais com
comportamentos especıficos, que torna possıvel, a modelagem virtual pelas bases de leis
fısicas. Uma partıcula e um ponto tri-dimensional no espaco, que possui uma serie de
propriedades, sujeitas a mudancas de acordo com acoes que possam agir sobre a mesma.
As partıculas recebem atributos especıficos entre si, que podem ser aleatorios ao sis-
tema e obedecem a determinadas regras de comportamento de acordo com o objeto que
esta se modelando [Clua, 1999]. Os SP tornam possıvel a modelagem de objetos virtuais
de grande complexidade.
A motivacao por tras da RA, e o fato de o usuario possuir o conhecimento do ambi-
ente real, e ate possuir habilidades visuais sobre o mesmo, tornando possıvel a interacao
com objetos virtuais gerados por computador e sobrepostos no mundo real, ou mesmo a
recepcao de informacoes adicionais a cerca de objetos do mundo real.
A motivacao por tras dos SP, e o fato da modelagem, com fidelidade, de objetos virtuais
mais complexos, que nao podem ser modelados por primitivas basicas ou disposicao de
vertices e arestas no espaco, sejam eles estaticos ou animados.
Logo, a motivacao por tras da RA e SP e a insercao de objetos virtuais complexos
e animados nestes sistemas, possibilitando uma interacao mais natural com o usuario
e expandindo o campo de aplicacao dos sistemas baseados em RA, inserindo em tais
sistemas, mais modelagens, de forma a acompanhar o desenvolvimento de ferramentas de
3
ensino, treinamento e entretenimento.
Atraves da uniao dessas tecnologias se torna possıvel, por exemplo, a elaboracao de
sistemas baseados em RA utilizando SP para a modelagem de fenomenos da natureza para
meteorologistas, vegetacao para ambientalistas, queima de fogos, incendios e fumaca para
treinamentos militares, corpo de bombeiros e ainda outros treinamentos como: gramado e
agua para treinamentos esportivos, animacao de multidoes para treinamento de policiais
em missao de controle, estrelas e corpos espaciais para treinamento de astronautas e
astronomos, simulacoes para lazer, jogos, cinema e uma serie de aplicacoes baseadas nas
tecnicas de sobreposicao da RA e modelagem dos SP.
1.2 Objetivos
O objetivo deste trabalho e demonstrar as possibilidades de sistemas baseados em
RA utilizando modelagem de objetos virtuais por SP. Dentro deste contexto, e tambem
objetivo demonstrar a versatilidade de sistemas baseados em RA que enriquecem o mundo
real com objetos e informacoes que se encontram em constante movimento, a fim de
tornar a interacao mais natural. Visando alcancar estes objetivos, apresentam-se as metas
propostas para a apresentacao deste trabalho:
• Analisar sistemas de RA e RV, relacionados a diversos temas, bem como seus pontos
fracos e fortes, criterios de aplicacao e modelagem;
• Estudar e Compreender a metodologia, plataforma, utilizacao dos sistemas de apoio
destinados ao desenvolvimento de um sistema de RA;
• Modelar varias entidades virtuais atraves dos SP;
• Encontrar melhorias na criacao de SP para modelagem de objetos virtuais;
• Mesclar essas entidades com o mundo real a fim de possibilitar uma interacao para com
o usuario (Mesclar RA e SP);
• Demonstrar resultados obtidos na forma de aplicacoes;
• Encontrar novas aplicacoes para sistemas baseados em RA assim como novas aplicacoes
de modelagem para SP;
• Detalhar dificuldades e limitacoes.
4
1.3 Organizacao da Monografia
O trabalho descrito neste texto esta divido em 7 capıtulos, sendo este o primeiro deles,
responsavel pela introducao ao tema trabalhado.
O Capıtulo 2 aborda os conceitos e fundamentos da RV, como historico, tipos de
sistemas, caracterizacao, dispositivos e aplicacoes.
Ao longo do Capıtulo 3 sao apresentados os conceitos e fundamentos da RA, semelhan-
te ao Capıtulo 2. Sao apresentandos tipos de sistemas, dispositivos, variacoes, interacao
e aplicacoes.
No Capıtulo 4 sao apresentados conceitos e fundamentos dos SP. Atraves de historico,
dinamica de simulacao, exemplos e aplicacoes.
O Capıtulo 5 traz as tecnologias utilizadas na implementacao e visualizacao das
aplicacoes. Sao abordados ARToolkit e OpenGL, a arquitetura proposta e o detalhamento
do processo.
No Capitulo 6 sao abordados os resultados, dificuldades, limitacoes e sugestoes para
trabalhos futuros relacionados ao tema.
Para finalizar, o Capitulo 7 traz as conclusoes obtidas com o desenvolvimento deste
trabalho.
E possıvel encontrar no apendice que esta localizado no fim deste trabalho, os codigos
fonte das aplicacoes desenvolvidas para fins de alcancar resultados.
5
Capıtulo 2
A Realidade Virtual
2.1 Introducao
O termo “Realidade Virtual”foi citado primeiramente na decada de 1980 [Oliveira, 2006].
O advento da Realidade Virtual (RV) e o avanco dos recursos computacionais, tornaram
a representacao do imaginario e a reproducao do real, algo mais facil.
Segundo Kirner e Tori (2004), com o uso interfaces mais intuitivas, o usuario pode
atuar no espaco tridimensional. A interacao com as representacoes e aplicacoes nao se
limita mais ao uso do mouse e teclado. Torna-se entao, possıvel ativar aplicacoes com-
putacionais, executando acoes diretamente sobre elementos tridimensionais ampliando em
intensidade os sentidos das pessoas.
Mas o que e a RV?
Existem varias definicoes para o termo “Realidade Virtual”, serao citadas duas que
particularmente se mostram mais interessantes. A RV pode ser definida de uma maneira
simplificada, como sendo, a forma mais avancada de interface do usuario de computador
disponıvel ate entao [Hancock, 1995]. Uma definicao mais detalhada sugere: “Realidade
Virtual e uma forma das pessoas visualizarem, manipularem e interagirem com computa-
dores e dados extremamente complexos”[Aukstakalnis e Blatner, 1992].
Englobando algumas outras definicoes de RV, pode-se dizer que RV e uma avancada
tecnica de interface, onde e possıvel ao usuario realizar imersao, navegacao e interacao em
um ambiente abstrato tridimensional gerado por computador, atraves de canais multi-
sensoriais [Kirner, 1999].
A interface utilizada em sistema de RV envolve dispositivos de fluxo de dados, entrada
e saıda, especıficos, dispositivos nao convencionais, como capacete de visualizacao, con-
troles, luvas e outros. Esses dispositivos possibilitam um mapeamento dos movimentos
do usuario, permitindo a exploracao do ambiente e a manipulacao indutiva dos objetos
[Kirner, 1999].
6
Dispositivos convencionais, tais como, mouse, teclado, monitor de vıdeo para execucao
do sistema de RV, tambem podem ser utilizados [Oliveira, 2006]. A secao 2.5 trara uma
abordagem sobre os dispositivos empregados em sistemas de RV.
Segundo Kirner (1999), “para a elaboracao de sistemas de Realidade Virtual e necessario
ter algum domınio sobre dispositivos nao convencionais de E/S, computadores de alto de-
sempenho e boa capacidade grafica, sistemas paralelos e distribuıdos, modelagem geometrica
tridimensional, simulacao em tempo real, navegacao, deteccao de colisao, avaliacao, im-
pacto social, projeto de interfaces, e aplicacoes simples e distribuıdas em diversas areas”.
Nas proximas secoes serao apresentados diversos conceitos sobre sistemas de RV. Como
historico, tipos de sistemas de RV, caracterısticas, dispositivos e aplicacoes.
2.2 Historico da Realidade Virtual
A decada de 1950 e marcada como o advento das experiencias com equipamentos
desenvolvidos para obter a RV, com o surgimento do Cinerama e do Cinemascope.
O Cinerama consistia em uma projecao em 180o com tres tomadas com angulos lev-
emente diferentes entre si em relacao a visao do expectador. Essa projecao induzia ao
usuario a sensacao de estar dentro da cena.
O Cinemascope consistia em um formato alargado de filmes obtido atraves de lentes
anamorficas que forneciam uma imagem no padrao proporcional 2,66:1 (Um pouco maior
que o padrao proporcional utilizado pelos cinemas nos dias atuais) combinada ao audio
estereofonico, que segue como padrao ate os dias atuais [Oliveira, 2006].
Em 1956 surgiu o Sensorama, desenvolvido por Morton Heiling. O Sensorama ex-
punha o usuario a uma combinacao de visao 3D, som estereo, vibracoes, sensacoes de
aroma, todos estes elementos reunidos em uma unica cabine, como mostra a Figura
2.1 [Cardoso, 2008]. Este foi um dos primeiros dispositivos que possibilita ao usuario
a sensacao de imersao em um ambiente virtual.
O inıcio da decada de 1960 foi marcado pelo primeiro dispositivo que respondia a movi-
mentacao do usuario [Kirner, 1999]. Comeu e Bryan idealizaram um sistema de circuito
fechado de televisao, tal que, o visor estava fixado a um capacete com um rastreador, que
poderia controlar, de forma remota, as cameras de televisao, alterando a apresentacao a
partir de movimentos do usuario [Cardoso, 2008].
Ainda na decada de 1960, e idealizado e construıdo por Ivan Sutherland o primeiro
capacete de visualizacao, cujas imagens eram geradas por um computador [Oliveira, 2006].
Esta e considerada a primeira implementacao de um sistema de RV imersiva [Kirner, 1999].
O projeto concebido na Universidade de Harvard, tambem contava com um sistema de
rastreamento fixado ao capacete do usuario, como ilustra a Figura 2.2 [Oliveira, 2006].
De acordo com Oliveira (2006), ao fim da decada de 1960 os projetistas ja tinham
7
Figura 2.1: Sensorama Desenvolvido por Morton Heiling [Oliveira, 2006]
condicoes de operar em tempo real, o que foi de suma importancia para geracao de imagens
em RV, apesar da resolucao disponıvel ainda ser muito precaria. A necessidade de criar
um termo que descrevesse a interacao entre homens e computadores era emergente, e em
1973, Myron Krueger concebia o termo “Realidade Vitual”.
Figura 2.2: Usuario com Capacete Desenvolvido por Sutherland em 1968 [Oliveira, 2006]
Em 1977 e 1982 surgiram as primeiras luvas digitais (data gloves), desenvolvidas por
um grupo da Univeridade de Illions e por Thomas Zimmerman respectivamente, para
serem acopladas aos computadores. Em 1987, a empresa VPL Research Inc colocou, pela
primeira vez, produtos de RV no mercado com a comercializacao das luvas digitais e um
capacete de visualizacao chamado “Eye Phones” [Kirner, 1999].
Na decada de 1990, destacam-se as tecnicas de RV utilizadas em treinamentos de
simulacao de voo [Oliveira, 2006]. Por estas questoes, a NASA foi pioneira em RV
[Cardoso, 2008]. Segundo Oliveira (2006), estes simuladores se limitavam a uma cabi-
ne construıda sobre plataformas moveis e eram capazes de apresentar mudancas de nıvel
e movimentacao (Figura 2.3), sendo considerados um dos mais influentes marcos da RV.
A partir de entao, a demanda dos componentes e produtos de RV vem evoluindo,
impulsionada pelo avanco das pesquisas, interesses comerciais, crescimento da industria e
usuarios. Expandindo cada vez mais um ramo que nao para de evoluir [Kirner, 1999].
8
Figura 2.3: Nasa View: Sistema de Simulacao da NASA [Duarte, 2008]
2.3 Caracterizacao da Realidade Virtual
Como foi abordado na introducao, ha varias definicoes e descricoes para o termo
“Realidade Virtual”. Isso se deve ao fato da interdisciplinaridade em que a RV apresenta
e a sua constante evolucao.
Segundo Kirner (1999), de uma forma ou outra, os sistemas de RV estao conectados
a sistemas de simulacao, interoperabilidade e outras caracterısticas. Por este fato, a RV
tambem pode ser considerada como a coexistencia de tres conceitos que formam o termo
“I3”(ilustrado na Figura 2.4) da RV: Imersao, Interacao e Imaginacao.
Figura 2.4: “I3”da RV [Duarte, 2008]
A imersao esta associada ao sentimento, por parte do usuario, de estar dentro do
ambiente virtual. Este ambiente pode ser explorado de diferentes formas, dependendo
de cada sistema (Os sistemas de RV serao apresentados na Secao 2.4), como o uso de
capacetes, projecao em paredes e teto, som, controles reativos, movimentacao entre outros
[Cruz-Neira, 1992].
A interacao esta associada a capacidade apresentada, por parte do sistema, de receber
dados enviados pelo usuario atraves de algum dispositivo e modificar o ambiente virtual
de forma instantanea, de acordo com essas acoes [Kirner, 1999].
9
A imaginacao esta associada ao envolvimento, por parte do usuario, que mede o grau
de motivacao do mesmo para com as atividades encontradas em determinado sistema.
O envolvimento pode ser ativo, como participacao em jogos, ou passivo, como a leitura
de livros. Os sistemas de RV oferecem suporte para estes dois tipos de envolvimento
[Kirner, 1999].
2.4 Sistemas de Realidade Virtual
Quando uma pessoa utiliza um capacete e luvas que interajam com um ambiente
abstrato, pode-se dizer que, trata-se de um exemplo classico de RV. Mas os sistemas de
RV nao se limitam apenas a sistemas que utilizam dispositivos especıficos. Nesta secao
sao abordados os tipos de sistemas de RV.
2.4.1 Sistemas Imersivos e Sistemas Nao Imersivos
A RV Imersiva e dependente de dispositivos (hardware) especıficos, como luvas, ca-
pacetes e projecoes no ambiente real. Estes dispositivos realizam um mapeamento dos
movimentos do usuario, provocando uma reacao do sistema que caracteriza uma interacao
com o ambiente virtual e os objetos abstratos contidos no mesmo. Esta interacao acontece
de forma direta, seja apontando, tocando ou realizando outras reacoes com estes objetos
[Oliveira, 2006].
A RV Nao Imersiva e baseada no uso de monitores [Kirner, 1999]. A interacao do
usuario com o ambiente acontece por intermedio do mouse, teclado ou outras formas de
controle, enquanto os resultados das entradas emitidas por estes dispositivos sao visuali-
zados em um monitor de vıdeo.
Segundo Oliveira (2006), a principal vantagem dos sistemas nao imersivos sobre os
sistemas imersivos, consiste no baixo preco.
2.4.2 Sistemas de Telepresenca
De acordo com Kirner (1999), “telepresenca e uma situacao, onde uma pessoa esta
objetivamente presente num ambiente real que esta separado fisicamente da pessoa no
espaco”. Os sistemas de telepresenca sao implementados por mecanismos de teleoperacao,
que envolvem usuario, interface homem-computador e ambiente remoto.
Os sistemas de telepresenca mantem a principal caracterıstica dos sistemas de RV, a
interacao com ambientes externos, embora os ambientes possam ser constituıdos de outras
pessoas do mundo real. A Figura 2.5 ilustra um sistema de telepresenca.
10
Figura 2.5: Sistema de Telepresenca [Guanabara, 2007]
2.4.3 Sistemas Mistos - Imagens Reais e Imagens Virtuais
Ha sistemas mistos, que cruzam imagens reais com imagens geradas por computador.
Entre eles pode-se citar Realidade Aumentada (RA) (abordagem do capıtulo 3 deste
trabalho) e a Realidade Misturada (RM).
A RM consiste em melhorar a visualizacao de objetos do mundo real, como ampliar a
visao do ser humano com informacoes abstratas, conforme Figura 2.6 [Oliveira, 2006].
Figura 2.6: Aplicacao de RM para Remocao de Tumores [Oliveira, 2006]
Esses sistemas mistos exigem dispositivos que sobreponham a imagem real com a
imagem virtual. Nesse sentido pode-se usar capacetes com visor semitransparente ou
captar as imagens utilizando cameras de vıdeo. E necessario um rastreador para mapear
os movimentos [Cardoso, 2008].
Sistemas RA ainda sao considerados recentes na escala evolutiva da RV, mas o cinema
ja utiliza tecnicas de RA para alcancar objetivos em cenas. Ja para a RM alem das
aplicacoes ja existentes, ha estudos para que carros projetem informacoes no para-brisa
[Oliveira, 2006].
2.4.4 Sistemas Distribuıdos e Sistemas Centralizados
Os sistemas de RV tambem podem ser classificados de acordo com os usuarios que
podem interagir com o ambiente [Oliveira, 2006]. Ha sistemas de RV Distribuıdos e Cen-
11
tralizados.
Nos sistemas de RV Distribuıda, existem varios usuarios que podem navegar pelo
ambiente e interagirem entre si, manipulando os mesmos objetos de forma concorrente.
Para que naveguem pelo ambiente sao utilizados os avatares, representacao geometrica do
usuario no mundo virtual. Essa abordagem e bastante empregada em jogos eletronicos
online [Kirner, 1999].
Nos sistemas de RV Centralizada, podem existir varios usuarios, caso em que o ambi-
ente se encontra em servidor web, navegando pelo ambiente, mas nao ha interacao entre
eles. O ambiente existe de forma independente para cada um.
Os sistemas de RV podem ser idealizados como combinacao das caracterısticas dos sis-
temas de cada secao anterior. Por exemplo, pode-se idealizar um sistema de RV imersiva,
aumentada e centralizada [Oliveira, 2006].
2.5 Dispositivos de Realidade Virtual
Como abordado nas secoes anteriores, os sistemas de RV dependem de dispositivos
especıficos, sejam convencionais ou nao. Estes dispositivos sao a interface entre o usuario
e ambiente virtual. Atraves destes dispositivos o ambiente reage as acoes do usuario.
A finalidade desta secao e apresentar os principais dispositivos de sistemas de RV.
2.5.1 A Visao e a Tridimensionalidade
A percepcao linear e um dos fatores que permitem o ser humano enxergar em tres
dimensoes. Algumas de suas caracterısticas sao a sombra, oclusao, textura, rotacao dos o-
lhos, convergencia e motion paralax. A oclusao se refere ao fato que objetos mais proximos
ao observador escondam parte de objetos mais distantes. A convergencia permite o ser
humano determinar exatamente a posicao de cada objeto. Motion paralax caracteriza o
fato que objetos mais proximos ao observador se movimentem com uma velocidade maior
que objetos mais distantes [Oliveira, 2006].
Outro fato importante e a capacidade da visao estereoscopica. Esse conceito de visao
consiste no fenomeno de que cada olho capta uma imagem diferente, e o cerebro rea-
liza uma analise do deslocamento lateral destas duas imagens, causando a sensacao de
profundidade [Pinho e Kirner, 1997].
2.5.2 Dispositivos para Visualizacao
Para conceder ao usuario a sensacao de visualizacao 3D, os dispositivos de sistemas
de RV podem ser monoscopicos e estereoscopicos [Kirner et al., 2006]. Os dispositivos
12
monoscopicos rederizam uma unica imagem que e exibida aos dois olhos. Ja os dis-
positivos estereoscopicos exibem uma imagem para cada olho, com ligeira diferenciacao,
acarretando a construcao de um par de imagens, simulando assim, a visao humana (es-
tereoscopica).
Tanto os capacetes tanto os oculos estereoscopicos causam a sensacao de pronfundi-
dade. Segundo Kirner, Tori e Siscoutto (2006), os capacetes causam a sensacao de imersao,
enquanto os oculos nao causam esta sensacao por si so, pois, dependem do ambiene de
visalizacao. Os monitores nao causam a imersao, ja as CAVEs (Secao 2.5.6) causam.
O funcionamento dos oculos estereoscopicos , representado na Figura 2.7, se baseia na
comutacao do estado das lentes, atraves de dois processos sendo eles a abertura (clarea-
mento) e o fechamento (escurecimento). A comutacao rapida das lentes e a defasagem
entre as imagens exibidas para cada olho proporcionam a sensacao de visualizacao de uma
imagem real.
Figura 2.7: Oculos Estereoscopicos e Tela de Projecao [Kirner et al., 2006]
Os capacetes ilustrados na Figura 2.8 sao dispositivos que apresentam duas imagens
defasadas, uma para cada olho, diretamente nos olhos do usuario, o que causa a sensacao
de imersao. Devido ao fato dos capacetes serem dispositivos rastreadores (secao 2.5.3), as
imagens apresentadas ao usuario mudam de acordo com a movimentacao do mesmo.
Figura 2.8: Sistema Imersivo com Capacete e Luvas [Kirner et al., 2006]
13
2.5.3 Dispositivos de Rastreamento
Os dispositivos de rastreamento mapeiam a movimentacao do usuario basicamente
para duas funcoes: animacao de personagens ou aplicacoes de RV [Kirner e Tori, 2004].
Na animacao, estes dispositivos sao usados para que a movimentacao de entidades vir-
tuais seja mais realista, enquanto que nas aplicacoes de RV, estes dispositivos monitoram
a posicao e orientacao da cabeca e maos do usuario em tempo real, para que o sistema
reaja a movimentacao do usuario.
2.5.4 Luvas Digitais e o Tato Virtual
A Realidade Virtual permite ao usuario interagir com o ambiente e os objetos virtuais
abstratos que nele existem. Para se interagir com este ambiente, uma das formas e o
toque [Oliveira, 2006]. O tato virtual, concebido pelo uso de luvas digitais (data gloves),
ilustradas na Figura 2.8 e mais detalhadamente na Figura 2.9, permite ao usuario pegar,
soltar, empurrar, puxar, girar e movimentar os objetos do cenario do ambiente virutal
[Kirner e Tori, 2004].
Figura 2.9: Elementos de uma Luva Digital [Tori et al., 2006]
2.5.5 Dispositivos Acusticos
O som presente em ambientes virtuais, faz com que a ilusao de realismo seja maior. As
principais caracterısticas do som, como timbre, duracao e volume, podem ser facilmente
reproduzidas por um sintetizador [Oliveira, 2006]. A caracterıstica mais importante do
som em ambientes reais e a possibilidade de identificacao da fonte sonora, ou seja, e poder
saber de onde som esta sendo emitido.
Para a simulacao dessas propriedades em ambientes virtuais, caracterısticas como
posicionamento, reflexao, geracao movel, atraso, absorcao e outras devem interagir com
usuario de acordo com suas acoes [Kirner e Tori, 2004].
Para que o usuario receba o som de acordo com seus estımulos, o som geralmente e
gerado por fones fixados no capacete de visualizacao, de forma que cada ouvido receba
14
uma fonte sonora. Estas fontes mudam o som de acordo com os movimentos da cabeca ou
da fonte geradora, isso se a fonte pertencer ao cenario do ambiente virtual [Oliveira, 2006].
2.5.6 Dispositivos para Sistemas Baseados em Projecao
Sistemas de RV baseados em projecao sao capazes de apresentar cenas em tamanho
real, possibilitando imersao total ou parcial, por parte do usuario.
Um dos sistemas de RV baseados em projecao e a tela panoramica. Este sistema
consiste em uma tela de projecao em formato de curva, que atinge aproximadamente 180o
em relacao ao posicionamento do expectador. As imagens sao sincronizadas, tratadas e
projetadas nesta tela de forma que o usuario possa navegar pelo ambiente virtual, ja que
as emendas das imagens sao quase imperceptıveis [Kirner e Tori, 2004].
A mesa virtual e outro exemplo. Para esse tipo de sistema e necessario outro disposi-
tivo especıfico, que consiste de uma mesa horizontal de vidro ou plastico, que receba uma
projecao estereoscopica, permitindo ao usuario manipular os objetos 3D que se apresentam
em sua frente com o uso de oculos estereoscopicos.
Outro exemplo de sistema de RV baseado em projecao, e o mais popular, e a CAVE.
Este sistema consiste em um comodo onde todo o ambiente (paredes, teto e piso) e
constituıdo de telas de projecao. O usuario navega pelo ambiente virtual totalmente
cercado pelo mesmo, ou seja, completamente imerso [Oliveira, 2006].
2.6 Aplicacoes da Realidade Virtual
A evolucao da RV ao longo das ultimas decadas acarretou uma grande variedade de
dispositivos de hardware e software. Essa variedade combinada com a constante evolucao
da tecnologia abriu as portas para o surgimento de novas aplicacoes da RV cada vez
mais sofisticadas e complexas. Esta secao aborda o uso da Realidade Virtual em diversos
campos de aplicacao.
2.6.1 Arquitetura e Projeto
E do escopo de profissionais de Engenharia civil e Arquitetura projetar edificacoes.
Tais projetos contem uma planta baixa da edificacao a ser construıda. Os clientes
destes profissionais aguardam que a obra esteja concluıda para que possam realizar uma
avaliacao. Mas esta avaliacao nem sempre e positiva. As medidas podem parecer maiores
ou menores comparadas as medidas previstas no projeto, as cores podem nao se combinar,
enfim, uma serie de elementos que nao poderiam ter sido visualizados antes [Oliveira, 2006].
Uma das saıdas encontradas pelos projetistas foi o uso de maquetes. As maquetes
sao representacoes em miniaturas de como o projeto deve ficar apos a conclusao. Mas as
15
maquetes ainda sim continham problemas: Erros humanos que afetam medidas, detalhes
de finalizacao, ambientacao e mais uma serie de fatores. Mas o mais crıtico e a navegacao.
A RV aplicada a Arquitetura reduz os erros humanos e infortunios por parte dos
clientes, pois, caracteriza um ambiente de acordo com os padroes do projeto e possi-
bilita ao usuario a sensacao de realismo atraves da navegacao pela maquete virtual, pelas
caracterısticas de interacao da RV, como ilustra a Figura 2.10.
Figura 2.10: Estadio Jornalista Mario Filho no Rio de Janeiro e Sua Maquete Virtual
2.6.2 Aplicacoes Medicas e na Area de Saude
O uso da RV na medicina foi alem de tomografias tridimensionais. E possıvel, por
exemplo, realizar treinamento cirurgico em cadaveres virtuais. Como ja foi citada na
secao 2.4.3, a Figura 2.6 mostra uma aplicacao medica de sistema de RV para auxılio em
cirurgias.
Na area da saude, a RV possibilita ensino de anatomia, visualizacao com Realidade
Aumentada, planejamento cirurgico, simulacao cirurgica, terapia virtual, tratamento de
deficientes, fisioterapia virtual, cirurgias pouco invasivas, informacoes adicionais de obje-
tos em orgaos com Realidade Misturada e mais uma serie de aplicacoes.
2.6.3 Treinamento Profissional
Como visto em secoes anteriores, um dos principais elementos da evolucao da RV foi
a criacao de sistemas de treinamento de voo na decada de 1990 (Figura 2.3). Apesar
de nos dias atuais estes sistemas formarem as bases para maioria dos jogos eletronicos,
ainda existem empresas que treinam seus colaboradores utilizando estes sistemas, devido
as suas grandes vantagens.
Medicos podem realizar treinamento com orgaos e partes do corpo sem que se tenha
um cadaver real. A RV possibilita a representacao 3D de todo o corpo humano e de outros
animais para estudo, alem de fornecer informacoes adicionais sobre todos orgaos e partes
do corpo humano.
16
Profissionais da area de tecnologia podem idealizar e visualizar suas criacoes e projetos
com o uso da RV. Para demonstracao de conhecimento, e possıvel criar um museu em RV
para que possa se realizar uma exposicao dos objetos em estudo [Oliveira, 2006].
2.6.4 Tratamento de Fobias
As pessoas que desenvolvem fobias podem encontrar um tratamento confiavel com o
uso de RV. A RV permite criar ambientes imersivos, como ambientes fechados e escuros
para a claustrofobia, simuladores de automoveis para pessoas que desenvolveram panico
no transito, aranhas virtuais para o tratamento da aracnofobia entre outros.
2.6.5 Area de Industria e Tecnologia
Construir prototipos, alem de exigir alto investimento financeiro, pode ainda repre-
sentar um fracasso. Testes gerados em computador viabilizam a construcao ou nao de um
prototipo [Oliveira, 2006]. A Realidade Virtual e empregada para realizacao de diversas
simulacoes, como projecao, desempenho, funcionamento entre outros, levando a equipe
tecnica a realizar correcoes e melhorias antes que o prototipo venha a ser construıdo,
como ilustra a Figura 2.11. As simulacoes feitas com RV podem auxiliar os pesquisadores
a desenvolverem seus projetos com sucesso.
Figura 2.11: Exemplo de Projeto Simulado por RV [Deultz, 2008]
2.6.6 Entretenimento
Segundo Kirner (1999), esta e a area onde a RV esta tao presente que pode passar
despercebida.
Os jogos eletronicos disseminam o uso de RV entre os jovens, publico alvo da industria
de jogos. Os jogos tendem a apresentar graficos cada vez mais complexos, detalhados e
realısticos, para que os usuarios dos jogos possam imaginar o jogo como algo real. Isso
pode ser visto na Figura 2.12.
17
Outro setor que vem exigindo realismo, por parte dos efeitos visuais, e a industria do
cinema. Embora seja um tipo de realidade nao imersiva, pois a aplicacao e visualizada
em monitor ou tela de projecao, algumas cenas podem ser criadas com o uso da Realidade
Aumentada, enriquecendo as cenas reais com objetos e personagens digitais, que sao cada
vez mais detalhados e realısticos. Um filme pode ser totalmente idealizado com RV,
incluindo os cenarios, objetos e personagens.
Figura 2.12: Tela de Jogo Desenvolvido para Plataforma PlayStation 3 [MCO, 2008]
E algo comum perceber o uso da RV em programacoes de canais de TV aberta.
Aplicacoes em jogos de futebol, cenarios de telejornais, previsao do tempo, propaganda,
seriados entre outros.
2.6.7 Telepresenca e Teleoperacao
A RV permite criar ambientes compartilhados por varios usuarios, que interagem e
comunicam entre si. Empresas que necessitam reunir seus colaboradores com frequencia
investem cada vez mais neste ramo. Nao se trata apenas de uma videoconferencia, uma
vez que esses sistemas permitem uma projecao 3D dos colaboradores, como se de fato se
encontrassem todos no mesmo ambiente. Voltar a secao 2.4.2 e ver a Figura 2.5.
Atraves de dispositivos de RV, o usuario pode realizar operacoes sobre determinados
elementos a distancia, especialmente os nocivos a vida humana. Operacoes delicadas
podem ser realizadas utilizando estes sistemas.
O campo de aplicacao dos sistemas RV tem grandes proporcoes. A RV e uma ferra-
menta de grande potencial, utilizada para elaboracao e solucao de problemas.
18
Capıtulo 3
A Realidade Aumentada
3.1 Introducao
Ja se torna algo cotidiano ao ser humano o uso dos computadores, uso de alta tecnolo-
gia, acesso a rede mundial, ferramentas de auxılio e outras formas de interface.
Neste sentido, tecnologias da computacao podem ser utilizadas como ferramentas de
ensino, pesquisa, treinamento, visualizacao, tratamento e mais uma serie de contextos.
Mas o fato e que, o uso de tais tecnologias vem sendo crescente, e nao e uma novidade
[Duarte, 2006], ja que estas acompanham os desejos e necessidades do usuario.
Dessa forma, aplicacoes que compreendem a visualizacao e interacao com informacoes
em tempo real, tambem estao em constante evolucao.
A Realidade Virtual (RV), abordada no capıtulo anterior, pode ser caracterizada como
uma avancada tecnica de interface, onde e possıvel ao usuario realizar imersao, navegacao
e interacao em um ambiente abstrato tridimensional gerado por computador, atraves
de canais multi-sensoriais. Possibilitando ao usuario, uma visualizacao e interacao com
informacoes virtuais abstratas em tempo real.
Segundo Duarte (2006), por mais avancadas que sejam as tecnologias de criacao em RV,
a percepcao humana consegue distinguir com clareza a sua artificialidade. Para tentar
reduzir esta distancia entre o real e o virtual, foi introduzida a Realidade Misturada,
abordada detalhadamente na Secao 3.2.
A RM compreende a Realidade Aumentada (RA) e a Virtualidade Aumentada (VA).
A primeira e apontada como foco deste trabalho. A RA enriquece ambientes reais com
objetos virtuais [Kirner et al., 2006], possibilitando ao usuario a visualizacao em tempo
real de tais objetos introduzidos no ambiente real.
Assim como os sistemas baseados em RV, sistemas baseados em RA, tambem exigem
dispositivos de fluxo de dados especıficos, para que as imagens do ambiente real possam
ser capturadas e apos a insercao dos objetos abstratos, sejam visualizadas pelo usuario.
19
Nas proximas secoes serao apresentados diversos conceitos sobre sistemas de RA, como
caracterizacao da RA, dispositivos, sistemas e aplicacoes.
3.2 A Realidade Misturada
A Realidade Misturada (RM) pode ser conceituada como a sobreposicao de objetos vir-
tuais em tres dimensoes gerados por computador sobre o ambiente fısico, visualizada pelo
usuario, com o suporte de dispositivos tecnologicos, em tempo real [Kirner et al., 2006].
A RM supera a RV pelo fato de nao apenas reproduzir ambientes virtuais, mas possi-
bilitar ao usuario interagir com o mesmo misturando informacoes reais e abstratas. A RM
completa ambientes atraves da incorporacao de objetos, seja do ambiente virtual para o
real, ou do ambiente real para o virtual.
Neste sentido, a RM pode ser caracterizada de duas maneiras diferentes: A RA e a VA,
conforme ilustracao da Figura 3.1. Essa caracterizacao e dependente da predominancia
que o ambiente real e seus objetos exercem sobre o ambiente virtual e seus objetos ou
vice versa.
Figura 3.1: Diagrama Realidade x Virtualidade [Milgran, 1994]
A RA e caracterizada pela predominancia do ambiente real sobre o ambiente virutal.
Segundo Azuma (2001), a RA e um sistema que suplementa o mundo real com obje-
tos virtuais gerados por computador, possibilitando a sensacao que os objetos abstratos
coexistem no mesmo espaco real em que estamos.
Ja a VA e caracterizada pela predominancia do ambiente virtual sobre o ambiente real.
Consiste em enriquecer o ambiente virtual com elementos reais capturados em tempo real
[Kirner et al., 2006].
3.3 Caracterizacao da Realidade Aumentada
Como apresentado nas secoes anteriores, a Realidade Aumentada (RA) e uma variacao
da Realidade Misturada, que combina entidades do ambiente real e do ambiente virtual,
com predominancia do real sobre o virtual. Neste sentido, melhora a interacao com o
20
usuario e aumenta a sensacao de realismo, visando diminuir a distancia entre o real e o
virtual.
A RA e caracterizada por quatro propriedades [Duarte, 2006]. A primeira delas e
combinacao de objetos reais e virtuais no ambiente real. Outra propriedade e a execucao
interativa em tempo real. Outra, e o alinhamento de objetos reais e virtuais. A ultima e
que a RA pode ser aplicada a todos os sentidos, incluindo audicao, tato e olfato.
Para compreender um sistema de RA, veja a Figura 3.2. Esta imagem representa um
vaso de flores e um carro, que sao objetos virtuais inseridos no ambiente real, no caso
sobre a mesa. E importante lembrar, que essa insercao ocorre em tempo real.
Figura 3.2: Objetos Virtuais Posicionados Sobre Mesa Real [Tori et al., 2006]
A imagem do mundo real a ser suplementado pelo sistema de RA deve ser capturada
por uma camera acoplada a um computador. Para que seja possıvel que as imagens do
ambiente real e do ambiente virtual sejam alinhadas (misturadas) de forma correta, a
camera que esta capturando a imagem deve realizar esse processo de captura de forma
constante.
Desse modo a posicao e orientacao da camera sao rastreadas a todo o momento. Esse
processo de rastreamento ou tracking e realizado por tecnicas de visao computacional para
a maioria dos sistemas de RA.
3.4 Tipos de Sistemas de Realidade Aumentada e
Seus Dispositivos
Os sistemas de RA sao diferenciados de acordo com a forma com que a imagem mis-
turada (ambiente real enriquecido com objetos virtuais) e apresentada ao usuario e visu-
alizada pelo mesmo. Estes sistemas ainda podem ser classificados com base na tecnologia
dos visualizadores (Displays) do sistema. Ambas aboradagens estao descritas nesta secao.
21
3.4.1 Sistemas Imersivos e Sistemas Nao imersivos
Quando o usuario visualiza a imagem misturada direcionando os olhos diretamente
para as posicoes reais dos objetos virtuais, tem-se um sistema de Realidade Aumentada
Imersiva. Isso devido ao fato de que o usuario tem uma visao direta sobre o mundo
misturado [Tori et al., 2006].
Ja quando o usuario visualiza a imagem misturada sem direcionar os olhos diretamente
para as posicoes reais dos objetos virtuais, tem-se um sistema de Realidade Aumentada
Nao Imersiva. Isso devido ao fato de que o usuario tem uma visao indireta sobre o mundo
misturado [Kirner et al., 2006].
Ambos sistemas sao ilustrados na Figura 3.3, respectivamente.
Figura 3.3: Sistemas Imersivos x Sistemas Nao Imersivos [Kirner et al., 2006]
3.4.2 Sistemas de Visao Otica Direta
O sistema de Visao Otica Direta utiliza oculos ou capacetes com lentes semitransparen-
tes que permitem o recebimento direto da imagem real, ao mesmo tempo em que possibili-
tam a projecao de imagens virtuais devidamente ajustadas com a cena real [Zorzal, 2008].
Uma maneira comum de se conseguir essa caracterıstica e usar uma lente em posicao
inclinada que permita a visao direta do ambiente real e que possa refletir a projecao de
imagens geradas por computador diretamente nos olhos do usuario, como mostra a Figura
3.4.
Os dispositivos compoem-se de duas partes: o gerador de funcoes e os monitores dos
oculos. A primeira, o gerador, e o processador e gerador das imagens virtuais, enquanto
os monitores dos oculos alinham e exibem essas imagens virtuais de forma direta aos olhos
do usuario.
A luminosidade do ambiente real pode ser um empecilho para este tipo de sistema, ja
que dependendo da intensidade, a imagem virtual pode ser prejudicada [Duarte, 2006].
Mas o menor tempo de processamento e garantia de boa definicao das imagens reais,
qualificam este tipo de sistema.
22
Figura 3.4: Diagrama do Sistema de Visao Otica Direta [Duarte, 2006]
3.4.3 Sistemas de Visao Direta por Vıdeo
Neste tipo de sistema, o usuario utiliza capacetes com duas ou mais microcameras de
vıdeo acopladas ao mesmo. As cameras cumprem o papel de olhos do usuario. A cena
real, capturada pela microcamera, ilustracao da Figura 3.5, e misturada com os elementos
virtuais gerados por computador e apresentadas diretamente nos olhos do usuario, atraves
de pequenos monitores montados no capacete [Zorzal, 2008].
Figura 3.5: Diagrama do Sistema de Visao Direta por Vıdeo [Duarte, 2006]
A imagem capturada pelas cameras a partir do mundo real e retransmitida para um
combinador de vıdeo, que alinha as imagens do mundo real com as cenas virtuais criadas
pelo gerador de cena, possibilitando a sensacao que o ambiente e unico [Duarte, 2006]. A
resolucao da camera pode comprometer a qualidade das imagens do mundo real, podendo
se tornar um empecilho a aplicacao deste tipo de sistema.
3.4.4 Sistemas de Visao por Vıdeo Baseada em Monitores
O sistema de Visao por Vıdeo Baseado em Monitor, consiste no uso de uma webcam
para capturar a cena real. Depois de capturada, a cena real e misturada com os objetos
23
virtuais gerados por computador e apresentada ao usuario no monitor, veja ilustracao da
Figura 3.6.
O ponto de vista do usuario normalmente e fixo e depende do posicionamento da
webcam. Funciona basicamente como o sistema anterior, dado que a diferenca, e que o
combinador de vıdeo transmite a imagem misturada para um monitor de vıdeo ao inves
de um oculos ou capacete [Duarte, 2006].
Figura 3.6: Diagrama do Sistema de Visao por Vıdeo Baseada em Monitores [Zorzal, 2008]
A principal vantagem destes sistemas e a nao necessidade, por parte do usuario, de
vestir algum equipamento, ao passo que, o fato de os monitores estarem sempre parados
em algum local, caracteriza uma desvantagem desses sistemas [Kirner et al., 2006].
3.4.5 Sistemas de Visao Otica por Projecao
Esse tipo de sistema consiste em superfıcies do ambiente real, onde sao projetadas
imagens dos objetos virtuais, cujo conjunto e apresentado ao usuario que o visualiza sem
a necessidade de nenhum equipamento auxiliar. Embora interessante, esse sistema e muito
restrito as condicoes do espaco real, em funcao da necessidade de superfıcies de projecao
[Zorzal, 2008].
3.5 Componentes de um Sistema de Realidade Au-
mentada
Um sistema de realidade aumentada possui dois componentes basicos: hardware e
software. O hardware envolve os dispositivos de entrada, displays, processadores e redes.
O software inclui o software de RV, posicionadores e misturadores de imagens, funcoes de
interacao e interfaces multimodais [Kirner et al., 2006].
24
3.5.1 Hardware
O hardware direcionado a RA pode usar dispositivos de RV, mas tende a nao ocupar
as maos do usuario, ja que elas devem interagir de forma natural no ambiente misturado.
De acordo com Kirner, Tori e Siscoutto (2006), a potencia de processamento principal
e das placas de apoio, para tratar as necessidades de multimıdia e RV, deve ser alta o
suficiente para garantir a execucao, em tempo real, das seguintes acoes: tratamento de
vıdeo, processamento grafico 3D, geracao de imagens misturadas, incorporacao de som,
execucao haptica, controle multimodal e varredura de dispositivos de entrada com enfase
no rastreamento.
3.5.2 Software
De acordo com o desenvolvimento de aplicacoes mais complexas de sistemas de RA,
assim como hardware, a RA demanda recursos de software [Duarte, 2006].O software ded-
icado aos sistemas de RA e utilizado para a preparacao do sistema atraves de ferramentas
de criacao de ambientes virtuais e misturados, assim como na fase de execucao para que
sirva de suporte das aplicacoes em tempo real.
O software e ulitizado para a implementacao dos objetos virtuais e sua integracao ao
ambiente real. Para tal integracao o software pode requerer auxılios como orientacao e
posicionamento dos elementos reais. A calibracao dos objetos virtuais no ambiente real
pode acontecer pela interacao visual ou pela analise de parametros [Kirner et al., 2006].
Como exemplo de software para criacao dos objetos abstratos virtuais, pode-se citar
VRML, X3D, OpenGL (abordada detalhadamente no Capıtulo 5), entre outros. Ja para
exemplo de software de autoria de RA pode-se citar ARtoolKit (abordado detalhadamente
no capıtulo 5), OSGART, MTR, DART, APRIL, LibTab, entre outros.
3.6 Realidade Aumentada x Realidade Virtual
Como abordado ao longo das secoes anteriores, a RA surgiu como uma aproximacao
dentro da RM, que visa diminuir a distancia entre o ambiente real e o ambiente virtual.
Sendo assim Kirner,Tori e Siscoutto (2006), apresentam um grafico onde dimensoes do
espaco e de artificialidade podem ser observados.
A RA e a RV podem ser comparadas sobre os seguintes topicos [Bimber, 2008]:
• A RA enriquece a cena do mundo real com objetos virtuais, enquanto a RV e totalmente
limitada pelo computador;
• No ambiente de RA, o usuario mantem o sentido de presenca no mundo real, enquanto
que, na RV, a sensacao visual e controlada pelo sistema;
25
Figura 3.7: Diagrama Artificialidade x Espaco [Kirner et al., 2006]
• A RA precisa de um mecanismo para combinar o real e o virtual, enquanto que a RV
precisa de um mecanismo para integrar o usuario ao mundo virtual.
3.7 Aplicacoes da Realidade Aumentada
As aplicacoes da RA podem ser dispostas em tres grupos: Aplicacoes moveis, aplicacoes
colaborativas e aplicacoes comerciais. Esta secao aborda o uso da Realidade Misturada,
focada na Realidade Aumentada em diversos campos de aplicacao [Azuma, 2001].
3.7.1 Aplicacoes Moveis
As aplicacoes moveis sao aplicacoes voltadas para orientacao e exibicao. Como ex-
emplo, pode-se citar informacoes adicionais encontradas em placas com marcadores de
sistemas de RA para um motorista com dificuldades visuais. As aplicacoes moveis in-
cluem:
• Visualizar anotacoes virtuais em edifıcios, salas e outros elementos urbanos para orientar
o usuario;
• Mostrar ou recuperar predios e outros elementos inexistentes ou em ruınas, enfatizando
o planejamento urbano e a arqueologia;
• Mostrar campos de batalha, em situacoes de treinamento militar;
• Turismo.
3.7.2 Aplicacoes Colaborativas
As aplicacoes colaborativas estao voltadas as areas que permitam a colaboracao do
computador. Este campo possui diversas areas de aplicacao que visam a manipulacao
26
direta de objeto atraves da colaboracao de computadores. As aplicacoes colaborativas
incluem:
• Treinamento e Montagem;
• Ensino e Aprendizagem;
• Comercio;
• Cirurgia;
• Teleconferencia;
• Entre outros.
3.7.3 Aplicacoes Comerciais
As aplicacoes comerciais, embora ainda em fase inicial, ja estao sendo usandas em
anuncios na TV, cinema, mostras e eventos culturais e esportivos, incluindo elementos
virtuais de propaganda associados a elementos reais da cena exibida [Kirner et al., 2006].
Como abordado neste capıtulo a Realidade Aumentada possui um vasto campo de
aplicacao e pesquisa, assim como a Realidade Virtual, tendo sempre em mente, que am-
bas se desenvolvem de acordo com a complexidade das ferramentas criadas e propostas,
elevando o grau de detalhamento e aproximacao entre o ambiente real e os ambientes
virtuais.
27
Capıtulo 4
Os Sistemas de Partıculas
4.1 Introducao
De acordo com Duarte (2006), a maioria dos sistemas baseados em RA consiste em
inserir objetos estaticos no ambiente real, visando complementar nosso universo com tais
objetos como se estes realmente pertencessem ao nosso ambiente.
Dessa forma, essas informacoes estaticas podem ser encaradas como modelagens vir-
tuais que nao apresentam movimentacao, por exemplo, uma vela virtual sobre uma mesa
real. A vela nao se movimenta, pois, se trata da representacao de uma entidade inanimada.
Assim, como ja abordado nas secoes anteriores, a RA e uma ferramenta com intuito de
aproximar o imaginario do nao imaginario, reduzindo a distancia entre a RV e o ambiente
real. Deste modo, as entidades modeladas para sistemas baseados em RA devem ser
representacoes fieis de objetos de nosso universo, ou bastante proximas disso.
Seguindo o exemplo descrito anteriormente, o usuario do sistema baseado em RA
responde ao tempo cronologico, ja que se trata de um ser humano. Se o usuario utiliza o
sistema a noite, o que deve acontecer?
Uma vela deve ser usada para iluminar com sua chama, logo, a vela do sistema baseado
em RA deve ter sua chama acessa se necessario. Entao, a vela deste sistema deve ter uma
modelagem agregada a si, a modelagem da chama, que se trata da modelagem de fogo.
Quando a vela entra em combustao, a parte rıgida da vela (a parafina) vai se trans-
formando em fluido, derretendo a medida que a chama avanca. Logo a vela deste sistema
deve ter outra modelagem agregada a si, a modelagem da parafina derretida, que se trata
da modelagem de fluido.
A modelagem da vela e consideravelmente simples, ja que atraves da deformacao de
alguma primitiva basica (algum polıgono) pode se alcancar a forma da vela, e ela e estatica.
Mas a modelagem do fogo e do fluido nao demonstram o mesmo comportamento. Isso
porque a superfıcie da vela e completamente definida, algo cilındrico e liso. Ja o fogo e o
28
fluido nao tem superfıcies definidas, uma vez que podem assumir qualquer forma e estao
em constante movimento.
Para modelagem do fogo e do fluido, e utilizada uma tecnica que simula o comporta-
mento das partıculas fısicas, pois, atraves delas, e possıvel modelar objetos de superfıcie e
comportamento complexos. Essa tecnica de modelagem e o uso de Sistemas de Partıculas
(SP).
Segundo Azevedo e Conci (2003), essa tecnica preenche as lacunas antes existentes na
modelagem de objetos cuja superfıcie nao se compunha continuamente com a deformacao
de polıgonos, como fogo, vento, poeira e agua.
Nas proximas secoes, serao apresentados diversos conceitos sobre SP, como historico,
caracterizacao, tipos, modelagens e aplicacoes.
4.2 Historico dos Sistemas de Partıculas
De acordo com Oliva (2004), uma das razoes para busca de novas tecnicas de mode-
lagem de objetos e seus comportamentos, se deve ao fato de que objetos naturais demons-
tram uma enorme variedade de formas irregulares e variacoes em seus detalhes, exibindo
grande contraste com os objetos fabricados pelo homem.
Com o aprimoramento dos campos de aplicacao da CG, surgiu a necessidade de mo-
delagem de objetos disformes, objetos estes, que nao poderiam ser representados pela
simples disposicao de vertices no ambiente virtual constituindo primitivas geometricas.
Uma solucao encontrada foi a introducao dos SP. Inicialmente os SP foram propostos
por Willian T. Reeves em 1983 [Reeves, 1983]. A proposta de Reeves compreendia a
modelagem de uma parede de chamas que consumia um planeta para o filme Star Trek
II: The Wrath of Khan conforme ilustrado na Figura 4.1, e tambem mais alguns objetos
que nao apresentavam fronteiras delimitadas.
O metodo original proposto por Reeves, mostrava cada partıcula independente, se
movendo conforme suas caracterısticas de acordo com influencias de campos de forcas
e limites, conceituando um metodo estocastico. Reeves partiu do conceito de que nao
existia interacao entre as partıculas do sistema.
Em 1985, surgiram os SP estruturados, utilizados para modelagem de arvores, grama
e outros objetos deste escopo. Estes SP estruturados tambem foram descritos por Reeves.
Essa estruturacao se deu por conta da interdependencia entre as partıculas do sistema
[Reeves, 1985].
Em 1990, Karl Sims compreendeu os trabalhos de Reeves, e introduziu um novo con-
ceito. As partıculas interdependentes poderiam interagir com o ambiente, permitindo a
criacao de cascatas e outras modelagens deste cunho [Sims, 1990]. Os metodos descritos
ate aqui, modelavam os objetos de acordo com seus volumes.
29
Figura 4.1: SP de Fogo do Filme Star Thek II: The Wrath of Khan [Reeves, 1985]
Em 1992, surgiram os SP orientados. Este metodo modelava os objetos de acordo com
suas superfıcies [Oliva, 2004]. Isso porque os SP tornam possıvel a juncao e separacao
de superfıcie sem intervencao manual ou definicao de novos parametros, diferentemente
dos metodos baseados em superfıcies deformaveis, que necessitam de partes distintas da
superfıcie.
Desde entao, houve uma constante evolucao dos metodos usados em SP. Foram intro-
duzidas ideias de dinamica molecular para modelagem de lıquidos e solidos, mecanica de
fluıdos e outras equacoes fısicas. Entre elas, as equacoes de Navier-Stokes e Euler, para a
modelagem de gases como fumaca, vapor, neblina e poeira [Holtkamper, 2003].
Outras tecnicas como deteccao de colisoes tambem sao objetos de estudo para a in-
teracao das partıculas com o ambiente virtual.
4.3 Caracterizacao dos Sistemas de Partıculas
De acordo com Reeves (1983), a representacao atraves de SP se diferencia dos outros
metodos de modelagem que normalmente sao usados em sıntese de imagem, por tres
formas diferentes.
Primeiro, um objeto nao e representado por elementos primitivos de superfıcies, como
polıgonos ou remendos. Isso porque tais elementos definem o limite da modelagem, mas
SP definem o volume da modelagem.
Segundo, um SP nao e uma entidade estatica. Isso porque novas partıculas nascem e
velhas partıculas morrem, pois, as partıculas mudam suas formas e se movimentam com
o passar do tempo.
Terceiro, um objeto representado por um SP nao e determinante, desde que sua forma
nao seja completamente especificada. Assim, processos estocasticos sao usados para criar
e mudar a forma e aparencia dos objetos.
Dessa forma, cada sistema e caracterizado pelo comportamento de suas partıculas.
30
4.4 O Que e Uma Partıcula?
Uma partıcula consiste em posicao e massa. Dessa forma, uma partıcula e um ponto
tridimensional no mesmo espaco que possui uma determinada massa e se localiza em
determinada posicao [Tonnesen e Szeliski, 1992].
Neste caso, aplicando forcas em cada partıcula, e possıvel animar o SP. Ao integrar as
forcas que atuam sobre as partıculas ao longo do tempo, de acordo com as leis da movi-
mentacao propostas por Newton, criam-se atributos dinamicos pertencentes as partıculas.
Esses atributos sao responsaveis pelo comportamento de cada partıcula dentro do
sistema.
4.4.1 Os Atributos de Uma Partıcula
Como ja citado na Secao 4.3, as partıculas se movimentam ao longo do tempo e mudam
suas formas. As partıculas podem ate mesmo morrer quando ja estao velhas e outras novas
nascerem.
Mas existem alguns atributos responsaveis por estes comportamentos. Por exemplo,
uma partıcula se movimenta com uma determinada velocidade e aceleracao, muda sua
posicao, para mudar de forma pode se dilatar ou contrair, mudando tamanho, cor ou ate
mesmo morrer de acordo com o tempo de vida que tem.
Dessa forma, o comportamento de uma partıcula e determinado pelo comportamento
de seus atributos. Para cada nova partıcula gerada, o sistema deve determinar as seguintes
propriedades [Oliva, 2004]:
• Posicao Inicial;
◦ Orientacao no espaco tridimensional;
◦ Localizacao central em X,Y e Z.
• Movimentacao Inicial;
◦ Velocidade;
◦ Aceleracao;
◦ Rotacao;
◦ Impulso;
◦ etc.
• Forma;
◦ Ponto;
◦ Linha;
31
◦ Esfera;
◦ Cubo;
◦ Retangulo;
◦ etc.
• Cor;
◦ Sistema RGB;
◦ Transparencia.
• Volume;
◦ Tamanho.
• Tempo de vida.
A faixa de movimentacao das partıculas e determinada pela combinacao da posicao,
movimentacao e tempo de vida das partıculas. As partıculas geralmente sao concebidas
em alguma posicao aleatoria e percorrem um caminho aleatorio dentro de uma faixa
de movimentacao, ate que atinjam o limite de seu tempo de vida, para entao serem
substituıdas por novas partıculas que vao obedecer a mesma dinamica.
Reeves (1983) descreveu que em um sistema esferico as partıculas se movimentam
para todas as direcoes, sem uma faixa de movimentacao definida. Isso porque o centro do
sistema (uma esfera) emite partıculas por toda sua extensao e, dessa forma, as partıculas
se movimentam em direcao ao exterior, se distanciando do centro do sistema.
Em sistemas circulares ou outras formas geometricas, as partıculas se movimentam
geralmente para cima, dentro de uma faixa de movimentacao, que pode ser deformada de
acordo com o angulo de ejecao das partıculas, como mostra a Figura 4.2.
Figura 4.2: Arquitetura do SP de Explosao de Reeves [Oliva, 2004]
32
Deste modo, fica claro que a faixa de movimentacao das partıculas, e criada e de-
formada pelo animador, atraves de operacoes e equacoes que delimitam as mais diversas
formas e volumes, de forma a obter os mais diversos SP. Ou seja, essa movimentacao res-
ponde a forcas externas aos sistemas, descritas por atributos como velocidade, aceleracao,
rotacao, etc.
Segundo Oliva (2004), as operacoes sobre partıculas requeridas pela animacao, podem
tanto iniciar ou alterar a posicao e a velocidade das partıculas. Em uma simulacao de
cunho puramente fısico, os parametros seriam primeiramente iniciados e para cada inter-
valo de tempo ∆t, a velocidade seria alterada pela influencia de aceleracoes externas (tais
como a gravidade) e entao, a posicao seria alterada tambem. No entanto, em simulacoes
de cunho cinematico, a posicao pode ser definida diretamente, independente do estado
anterior ou da velocidade.
De acordo com esta variacao, alguns outros atributos como cor e transparencia tambem
podem ser alterados.
Outro parametro que contribui para esta variedade e a forma da partıcula [Reeves, 1985].
As partıculas podem assumir formas de pontos, segmentos, linhas, esferas, cilindros, entre
outros e ate mesmo assumir formas deformadas destas formas basicas para realizar apro-
ximacoes mais exatas nas modelagens. Por exemplo, humanoides para animar multidoes.
4.4.2 Simulacao das Partıculas
Apos a inicializacao, para cada intervalo de variacao de tempo, as partıculas sao
modificadas. Dessa forma, o procedimento para computar cada intervalo de tempo em
uma sequencia envolve os seguintes passos [Castro, 2008]:
• Geracao de partıculas: A geracao das partıculas depende do escopo da simulacao. A
geracao das partıculas e geralmente determinada pelo numero medio de partıculas
ja existentes;
• Definicao dos atributos das partıculas: Os atributos das partıculas devem ser inicializa-
dos, para que possam ser modificados de acordo com a movimentacao da partıcula;
• Morte das partıculas: Quando as partıculas sao concebidas, e atribuıdo a elas um
tempo maximo de permanencia no sistema, o tempo de vida. Este tempo limite e
decrementado de acordo com o avanco dos quadros da animacao. Assim que este
tempo maximo alcancar zero, essas partıculas sao extintas do sistema;
• Atualizacao das partıculas: Como visto na secao anterior, de acordo com os interva-
los de tempo, a velocidade das partıculas e alterada por aceleracoes externas, que
acarretam o deslocamento das partıculas, ou seja, as partıculas ganham uma nova
posicao. Esta posicao deve ser alterada a cada novo intervalo de tempo;
33
• Renderizacao das partıculas: O ultimo passo e renderizar as partıculas. O mais re-
comendavel e que cada partıcula seja renderizada individualmente.
Os passos descritos acima podem ser vistos na pratica. Oliva (2004) propoe o esboco de
um algoritmo, Algoritmo 4.1, que descreve um laco de iteracao para a possıvel simulacao
de um SP.
Algoritmo 4.1 Possıvel Laco de Simulacao de um Sistema de Partıculas
Gerar e Iniciar partıculas
para cada quadro da animacao faca
para cada incremento no tempo de simulacao faca
Selecionar um subconjunto de partıculas
Efetuar as operacoes para partıculas do subconjunto
Atualizar as posicoes usando as velocidades
fim para
fim para
4.5 Gerando e Visualizando Imagens com Sistemas
de Partıculas
Cada partıcula e encarada como um ponto incandescente, uma fonte de luz. Nisso
consiste o metodo basico para a modelagem das partıculas [Oliva, 2004]. Cada pixel e
incrementado com um pouco de luz vindo de cada partıcula. A intensidade e atenuada
de acordo com a distancia com que o observador esta. Uma partıcula que se encontra
atras de uma outra partıcula nao e obstruıda. Essas partıculas tambem incrementam a
coloracao do pixel, de acordo com a ilustracao da Figura 4.3.
Figura 4.3: Explosao de Fogos Multicolorados Modelada por SP [Reeves, 1985]
A aparencia das imagens obtidas atraves de partıculas possui muitas deficiencias. As
partıculas ainda nao apresentam suavidade nas imagens, isto e, existe o problema de
34
imagens quadriculadas e granulares. Mas o mapeamento garante imagens de explosao e
fogo com maior qualidade e realismo [Feldman, 2003].
Outra ferramenta utilizada para garantir essa qualidade e o Motion Blur [Oliva, 2004].
Isso por que as partıculas possibilitam que seus nucleos sejam seguidos por uma cauda
borrada, com cores e transparencia gradualmente variadas com relacao ao nucleo, carac-
terizando o efeito Motion Blur, que tambem pode ser visto nos fogos de artifıcio da Figura
4.3.
4.6 Tipo de Sistemas de Partıculas
Os sistemas de partıculas podem ser classificados em tres tipos. Sistemas de Partıculas
Estocasticos, Sistemas de Partıculas Estruturados e Sistemas de Partıculas Orientados
[Oliva, 2004].
4.6.1 Sistemas de Partıculas Estocasticos
A principal caracterıstica destes sistemas e o fato de as partıculas serem independentes.
Elas nao dependem umas das outras [Reeves, 1985]. A cor e a transparencia tem grande
importancia nas modelagens baseadas nestes sistemas. Dessa forma, algumas possıveis
simulacoes destes sistemas sao fogo, fumaca, explosoes e outras simulacoes pertencentes
a este escopo.
4.6.2 Sistemas de Partıculas Estruturados
A principal caracterıstica destes sistemas e a hierarquia de partıculas. Ou seja, as
partıculas nao sao mais independentes, pois obedecem uma hierarquia. Existe uma relacao
complexa entre as partıculas do sistema, para que quando juntas, constituam um objeto
tridimensional coerente [Smith, 2004].
De acordo com Reeves (1985), uma arvore, por exemplo, e esbocada com varios seg-
mentos de reta e talvez cırculos, representando seus galhos e folhas. Existem relacoes
entre as partıculas que representam os galhos e as folhas da arvore ja que, quando juntas,
constituem o objeto tridimensional completo, ou seja, a arvore.
Segundo Oliva (2004), para manter realismo na iteracao, processos estocasticos podem
ser utilizados em sistemas estruturados, prevendo parametros de controle, proporcao e
aleatoriedade.
35
4.6.3 Sistemas de Partıculas Dirigidos
A principal caracterıstica destes sistemas e a juncao de duas ou mais tecnicas para a
modelagem do objeto. Isso porque SP sao mais maleaveis do que superfıcies deformaveis
apresentando grande flexibilidade na formacao de diversos objetos. Mas na ausencia de
influencias e limites externos, os SP demonstram uma tendencia de se acomodarem para
composicao de solidos e nao superfıcies [Oliva, 2004].
Dessa forma, deve-se unir metodos para a modelagem das partes mais suaves e uni-
formes do objeto e utilizar os SP para modelagem das partes complexas e disformes.
Um bom exemplo destes sistemas e a agua [Foster, 2000]. Usar equacoes para mode-
lagem da superfıcie mais suave, e SP para modelagem de ondas, turbulencias e gotas.
4.7 Vantagens dos Sistemas de Partıculas
Segundo Reeves (1983), os SP possuem grandes vantagens sobre as tecnicas classicas
de modelagem baseadas na distorcao de superfıcies.
A primeira delas, e que uma partıcula e muito mais simples de lidar do que um
polıgono. Isso porque uma partıcula e a representacao mais simples que se tem de uma
superfıcie. Dessa forma o processamento dessas partıculas resulta na modelagem de obje-
tos mais complexos que o processamento das outras superfıcies. Alem de que as partıculas
possibilitam a aplicacao do efeito Motion Blur sem complicacoes.
Segundo, a definicao dos modelos e procedural e e controlada por numeros aleatorios.
Dessa forma nao e necessario grande design humano para obter objetos mais detalhados,
como sao necessarios retoques quando se usa outras tecnicas. Assim um sistema de
partıculas pode ajustar o nıvel de detalhamento de acordo a necessidade de visualizacao
por se tratar de um metodo procedural.
Terceiro, os SP sao “vivos”. Eles mudam de forma constantemente de acordo com os
intervalos de tempo. E extremamente difıcil representar objetos com estas caracterısticas,
usando-se tecnicas baseadas na distorcao de superfıcies.
4.8 Aplicacoes dos Sistemas de Partıculas
Como abordado ao longo deste capıtulo, os SP possuem um campo vasto de aplicacoes,
todas convergindo para a modelagens de objetos complexos, que contem superfıcies dis-
formes que realizam movimentos complexos e detalhados.
Como exemplo, pode-se citar um corpo solido se chocando com uma substancia liquida,
fato ilustrado na Figura 4.4.
36
Figura 4.4: Simulacao de Fluidos Atraves de SP: Colisao com Corpo Solido [Oliva, 2004]
Assim, os SP sao utilizados em geral para representacoes de fenomenos da natureza,
lıquidos e fluidos, gases, chamas e explosoes, multidoes, ondulacoes, poeira e granulacoes,
e mais uma serie de entidades que se encaixam neste perfil, garantindo uma modelagem
virtual com bastante fidelidade ao objeto real.
37
Capıtulo 5
Tecnologias Relacionadas e
Arquitetura Proposta
5.1 Introducao
A modelagem de objetos 3D pode se dar de varias formas, uma delas e atraves da
deformacao de solidos (primitivas). Outra possıvel, e o uso de texturas agregadas aos
modelos. Ainda pode-se realizar a modelagem com sistemas de partıculas, ou utilizar a
combinacao de algumas destas tecnicas. Por fim, ainda e possıvel abordar outros proce-
dimentos.
Atraves de bibliotecas e linguagens e possıvel conceber tais modelagens. Agora, i-
magine se existisse uma delas que possibilitasse a modelagem de objetos 3D de varias
formas?
Desde 1992, essa linguagem existe. E a Open Graphic Language (OpenGL). A OpenGL
possibilita implementar modelos de forma rapida e direta, dado que essa multi-linguagem
e leve, alem de facilitar a ligacao com outras tecnologias.
A OpenGL e ligada a outras tecnologias, para garantia de melhores resultados nos
modelos criados, ou simplesmente para possibilitar tais novas tecnologias. Um bom e-
xemplo e a RA, pois, os objetos 3D sobrepostos no mundo real, tem de ser modelados de
alguma forma em ambiente virtual.
Para concepcao de sistemas deste escopo, existe uma biblioteca que facilita a vida dos
desenvolvedores: O Augmented Reality Tool Kit (ARToolKit) ou kit de ferramentas de
Realidade Aumentada.
O ARToolKit utiliza tecnicas de visao computacional, para calcular em tempo real
a posicao e a orientacao relativa dos objetos virtuais, baseando-se na imagem em vıdeo
capturada por uma camera. Deste modo, o software ARToolKit fornece informacoes
dinamicas relativas a alteracao do cenario do ambiente real.
38
Dessa forma, os sistemas de RA utilizam basicamente duas tecnologias relacionadas.
A primeira esta ligada a modelagem dos objetos virtuais. Ja a segunda esta relacionada
a tecnica de sobreposicao deste objetos no ambiente real. Assim, utilizando a OpenGL,
e possıvel modelar objetos 3D e coloca-los, alinha-los e visualiza-los no ambiente real
atraves do ARToolKit, concebendo desta forma, o sistema baseado em RA.
As secoes seguintes trazem abordagens relacionadas a estas tecnologias, descrevendo
seus historicos, casos de uso, funcionamento, aplicacoes e exemplos.
5.2 O Software ARToolKit
O software ARToolKit e uma ferramenta (ou um kit de ferramentas) gratuita usa-
da para criacao simplificada de sistemas baseados em RA, pois, calcula rapidamente os
parametros de vıdeo capturados do mundo real para realizar de forma simples a insercao
de entidades virtuais. As proximas secoes abordam detalhes sobre esta biblioteca.
5.2.1 Historico do ARToolKit
A biblioteca gratuita ARToolKit foi criada no Japao, na Universidade de Osaka pelo
Dr. Hirokazu Kato. Foi desenvolvida posteriormente pelo Laboratorio de Interfaces com
Humanos na Universidade de Washiton nos Estados Unidos e na Universidade de Can-
terbury na Nova Zelandia, com o intuito de tornar facil o desenvolvimento de aplicacoes
baseadas em RA por parte dos programadores [Duarte, 2006].
5.2.2 Alinhamento “Real x Virtual”com Cartoes Marcadores
Uma das grandes dificuldades da criacao de sistemas baseados em RA e o calculo
preciso do ponto de vista (perspectiva) do usuario em tempo real, para que a sobreposicao
das imagens virtuais e reais esteja alinhada [Consularo et al., 2005].
Dessa forma, esse problema e causado porque o processamento das imagens e direta-
mente depende da perspectiva do usuario, pois, o mesmo pode se movimentar em diversas
direcoes durante o uso da aplicacao. Assim, o ARToolKit utiliza tecnicas de visao com-
putacional para calcular a posicao da camera que coleta as imagens do mundo real e a
orientacao relativa dos marcadores fısicos, em tempo real.
Este procedimento e baseado no uso de cartoes marcadores. Estes cartoes consistem
em um sımbolo geralmente envolvido por uma moldura negra (veja a Figura 5.1 (a)).
O ARToolKit, captara a imagem do ambiente real e a processa (veja a Figura 5.1
(b)), assim quando ha o reconhecimento do cartao, o software sobrepoe sobre ele o objeto
virtual (veja a Figura 5.1 (c)) [Billinghurst e Kato, 2002]. Assim, o usuario tem liberdade
de movimentacao do cartao, possibilitando a visualizacao do objeto em tres dimensoes, de
39
qualquer angulo, desde que a imagem do cartao nao seja obstruıda, pois, o rastreamento
do ARToolKit se finalizaria.
5.2.3 Funcionamento do ARToolKit
Os requisitos basicos de hardware para o funcionamento do ARToolKit sao uma
camera digital com saıda USB, Sistemas Operacionais Windows(95/98/2000/XP) ou
Linux, cartoes marcadores e um microcomputador 500 Mhz ou superior [Kato, 1999].
Para assimilar o funcionamento do ARToolKit, segue-se um roteiro detalhado de seu
funcionamento. Primeiramente, e realizado o processamento da imagem capturada pela
camera. A imagem de vıdeo capturada (Figura 5.1(a)) e transformada em uma imagem
binaria em Preto e Branco, como representado e Figura 5.1(b), com base no valor do
limiar de intensidade. Em seguida, realiza-se uma busca por regioes quadradas.
Dessa forma, o ARToolKit encontra todos os quadrados na imagem binaria, muitos
dos quais nao correspondem a marcadores de referencia. Para cada quadrado, o desenho
padrao dentro dele e capturado e comparado com alguns gabaritos pre-treinados. Se
houver alguma similaridade entre algum dos quadrados com alguns dos gabaritos, entao o
software considera encontrado um dos marcadores de referencia [Consularo et al., 2005].
Figura 5.1: Processamento da Imagem Capturada
O ARToolKit usa entao o tamanho conhecido do quadrado e a orientacao do padrao
encontrado para realizar o calculo da posicao real da camera em relacao a posicao real
do marcador. Uma matriz 3x4 contera as coordenadas reais da camera em relacao ao
marcador. Esta matriz e usada para calcular a posicao das coordenadas da camera vir-
tual. Se as coordenadas virtuais e reais da camera forem as mesmas, o modelo de CG
pode ser sobreposto precisamente sobre o marcador real, como mostra a Figura 5.1(c)
[Duarte, 2006].
A Figura 5.2, descreve mais detalhadamente o procedimento do ARToolKit, desde a
captura da imagem ate a sobreposicao do objeto virtual.
40
Figura 5.2: Diagrama de Funcionamento do ARToolKit [Consularo et al., 2005]
5.2.4 Desenvolvimento de Aplicacoes Utilizando ARToolKit
De acordo com Consularo, Coelho e Fernandes (2005), o desenvolvimento de aplicacoes
baseadas em RA utilizando ARToolKit consiste em duas partes. A primeira e escrever
a aplicacao. E a segunda e treinar as rotinas de processamento de imagens sobre os
marcadores do mundo real que serao utilizados na aplicacao.
No entanto, existem alguns passos necessarios para possibilitar o estagio de escrever a
aplicacao, que sao:
• Passo 1:
◦ Inicializar o caminho dos parametros de vıdeo;
◦ Ler os arquivos de padroes de marcadores;
◦ Ler os parametros de camera.
• Passo 2:
◦ Capturar um quadro de entrada de vıdeo.
• Passo 3:
◦ Detectar os marcadores e reconhecer os padroes no quadro capturado da entrada
de vıdeo.
• Passo 4:
◦ Calcular a transformacao da camera em relacao aos padroes detectados.
41
• Passo 5:
◦ Desenhar os objetos virtuais nos padroes detectados.
• Passo 6:
◦ Fechar a entrada de vıdeo.
E importante ressaltar que os Passos 2 ate 5 sao repetidos de forma contınua ate que
a aplicacao se finalize. Ja os Passos 1 e 6, sao executados para inicializacao e finalizacao
da aplicacao, respectivamente. Outro fator que pode ser levado em conta, e a calibracao
da camera, que deve acontecer na primeira vez que o software for executado em uma
maquina.
5.2.5 Versoes do ARToolKit
Varias versoes do ARToolKit estao disponıveis e sao implementadas em diversas lin-
guagens, como MatLab e Java, embora as versoes mais atualizadas e utilizadas sao as im-
plementadas em C [Duarte, 2006]. Destas, algumas oferecem suporte para implementacao
em VRML e OpenGL (Secao 5.3).
A versao escolhida para o desenvolvimento deste trabalho foi a ARToolKit 2.65 com
suporte para OpenGL, implementada na linguagem C++
As versoes do ARToolKit acompanham a evolucao do tratamento que os Sistemas
Operacionais fornecem aos dispositivos de vıdeo. A versao atual do ARToolKit oferece
suporte para RA com Visao Direta por Vıdeo ou Visao Direta Optica (descritas deta-
lhadamente no Capıtulo 3). A RA por visao Direta por Vıdeo e aquela cujas imagens
virtuais sao sobrepostas as imagens de vıdeo ao vivo capturadas do mundo real.
A segunda opcao e a RA por Visao Direta Optica, onde os objetos virtuais sao so-
brepostos diretamente as imagens do mundo real percebidas pelo usuario. A RA por
Visao Direta requer um dispositivo HMD (Head Mounted Display) (Secao 2.2.5), pois o
usuario recebe diretamente a informacao misturada e, exige tambem, um procedimento
de calibracao da camera que adquire imagens do mundo real.
Estes procedimentos podem variar entre algo mais simples, quando a Visao Direta e
por Vıdeo, ou mais complexo, quando e por Visao Optica Direta [Calonego et al., 2004].
5.3 A OpenGL
A OpenGL e definida por Manssour (2008) como um programa de processamento
grafico. Dessa forma, se apresenta como uma biblioteca de rotinas graficas para modela-
gem 2D e 3D, possibilitanto uma renderizacao extremamente rapida.
42
5.3.1 Historico da OpenGL
O padrao industrial da OpenGL e relativamente novo, mas ha alguns anos vem ga-
nhando muitos seguidores. O precursor da OpenGL era a GL (Graphic Language), na
Silicon Graphics Inc (SGI). A IRIS GL era a API de programacao 3D nas estacoes daquela
empresa. Estes computadores (estacoes) eram mais que computadores de proposito geral;
Tinham hardware especializado e sofisticado para desenvolvimento de graficos.
Os problemas surgiram quando a SGI apresentou um projeto multi-plataforma para
IRIS GL. Surge entao a OpenGL. A OpenGL foi concebida da juncao da IRIS GL e
dos esforcos da SGI para criacao de uma linguagem melhor adaptavel a outros Sistemas
Operacionais e Hardware. Este novo conceito deveria fornecer as qualidades da GL, porem
seria aberta [Wright e Sweet, 1996].
Em 1992, a primeira especificacao da OpenGL, a versao OpenGL 1.0, foi introduzida.
Esta, causou uma revolucao na 1 a Conferencia de Desenvolvedores Win32 com aplicacoes
medicas, cinematograficas e mais. Como OpenGL deveria ser aberta, foi criada entao a
Mesa de Revisao da Arquitetura OpenGL pela SGI, Digital Equipament Comporation,
IBM, Intel e Microsoft.
Em 1995, essa mesa de revisao deliberou a especificacao final para a versao OpenGL
1.1. Esse conselho de revisao se encontra duas vezes por ano para adicoes e melhorias na
especificacao.
5.3.2 O que e a OpenGL?
OpenGL e definida como uma interface de software para hardware de processamento
grafico. Em suma, e vista como uma biblioteca de modelagem grafica 3D extremamente
rapida e portatil. Atraves da OpenGL, e possıvel criar elegantes graficos 3D com grande
qualidade visual.
A OpenGL possui a vantagem de apresentar uma ordem de magnitude mais rapida que
Ray-Tracing (Tecnica de renderizacao que utiliza luz projetada em cada pixel da imagem,
tornando-os visıveis). Isso porque seus algoritmos foram cuidadosamente desenvolvidos e
otimizados pela SGI [Wright e Sweet, 1996].
Apresenta-se como uma linguagem bastante procedural em lugar de uma linguagem
grafica descritiva. Em vez de descrever a cena e como ela devia aparecer, o programador
descreve os passos necessarios para alcancar uma certa aparencia ou efeito.
Contudo, OpenGL nao e linguagem. Na verdade e uma poderosa e sofisticada API
para criacao de aplicacoes graficas 3D (ou tambem 2D). Seu funcionamento e semelhante
ao de uma biblioteca escrita em C, uma vez que fornece uma serie de funcionalidades.
Geralmente, se diz que um programa e baseado em OpenGL ou e uma aplicacao OpenGL,
o que significa que ele e escrito em alguma linguagem de programacao (geralmente C) que
43
faz chamadas a uma ou mais bibliotecas OpenGL [Manssour, 2008].
A OpenGL oferece suporte a iluminacao, colorizacao, mapeamento de textura, transparencia,
animacao, entre muitos outros efeitos visuais. Dessa forma, a OpenGL passou a ser re-
conhecida e aceita como um padrao para desenvolvimento de aplicacoes graficas 3D em
tempo real.
De fato, OpenGL fornece um pequeno conjunto de primitivas graficas para constru-
cao de modelos, tais como pontos, linhas e polıgonos. As bibliotecas GLU (Graphic
Library Utility), GLUT (Graphic Language Utility, ToolKit), GLX (Graphic Language
Extension to the X Window System) e FSG (Fahrenheit Scene Graph), que fazem parte
da implementacao OpenGL, e que fornecem as varias funcoes para modelagem, tais como
superfıcies quadricas, curvas e superfıcies NURBS (Non Uniform Rational B-Splines),
renderizacao, grafos de cena, etc [Woo et al., 1999] [Wright, 2000].
5.3.3 Funcionamento da OpenGL
A Figura 5.3 ilustra, de forma simplificada, o funcionamento da OpenGL. Como uma
aplicacao faz chamadas as funcoes da OpenGL, os comandos requeridos em tais chamadas
sao colocados em um buffer de comandos, que e preenchido com comandos, vertices, dados
de textura, etc. Quando este buffer e “esvaziado”, os comandos e dados sao emitidos ao
proximo estagio, para receberem efeitos especıficos.
Figura 5.3: Diagrama de Funcionamento da OpenGL [Manssour, 2008]
Apos a etapa de aplicacao das transformacoes geometricas e da iluminacao (se nao
ha necessidade de aplicacao de tais efeitos, o buffer de comandos emite-os direto para
a rasterizacao), e feita a rasterizacao, que e a geracao da imagem a partir dos dados
geometricos, de cor e textura. A imagem final, e entao colocada no frame buffer, que e a
memoria do dispositivo grafico. Assim, a imagem e exibida no monitor [Manssour, 2008].
5.3.4 Utilizacao/Insercao de Bibliotecas OpenGL
Embora a OpenGL seja uma biblioteca de programacao padrao e aberta, existem
diversas implementacoes para Windows e para Linux. A implementacao utilizada no am-
biente Linux e a biblioteca Mesa. Tambem existem implementacoes para os compiladores
Visual C++, Borland C++, Dev C++(utilizado para desenvolvimento dos SP), Delphi e
Visual Basic.
44
E necessario preparar o sistema para o trabalho com as bibliotecas OpenGL. No caso da
implementacao com Microsoft (SO utilizado no desenvolvimento deste trabalho), o sistema
operacional fornece os arquivos opengl32.dll e glu32.dll, que sao necessarios para execucao
de programas OpenGL. Alem disso, sao fornecidas com suas ferramentas de programacao
(Microsoft Visual C++ ou Dev C++, por exemplo), as bibliotecas opengl32.lib (OpenGL)
e glu32.lib (GLU).
Assim, para criacao de programas com ferramentas de programacao Microsoft (ou
compatıveis) que usem OpenGL, e necessario adicionar estas duas bibliotecas a lista de
importacoes. Os prototipos da biblioteca de funcoes utilitarias estao em um arquivo
diferente, glu.h. Estes arquivos normalmente estao localizados em uma pasta especial no
path do include [Wright, 2000].
Dessa forma, e preciso preparar a ferramenta de programacao para realizacao de
chamadas de bibliotecas OpenGL, para tornar possıvel a utilizacao da OpenGL em diver-
sos sistemas.
5.3.5 Sistemas de Partıculas em OpenGL
Como visto no capıtulo 4, uma partıcula e um ponto tridimensional no espaco que
possui massa, posicao, velocidade e mais uma serie de atributos que estao sujeitos a
influencias de forcas exteriores como a forca da gravidade, por exemplo.
Dessa forma, os atributos das partıculas podem ser definidos em uma unica estrutura
part atraves da OpenGL, como mostra o Codigo 5.3.1.
1 typedef struct{2 GLfloat posicao[3]; //Posic~ao no espaco nos eixos X,Y e Z3 GLfloat velocidade[3]; //Velocidade nos eixos X,Y e Z4 GLfloat aceleracao[3]; //Acelerac~ao nos eixos X,Y e Z5 GLfloat cor[3]; //Cor no padr~ao RGB6 GLfloat transparencia; //Transparencia do corpo da partıcula7 GLfloat tempoVida; //Tempo que a partıcula encontra-se ativa8 }part;
Codigo 5.3.1: Estrutura das Partıculas
Define-se um numero maximo de partıculas que devem estar ativas no sistema, como
mostra Codigo 5.3.2 (10.000 partıculas ativas no sistema). Todas as partıculas ativas no
sistemas tem os mesmos atributos, ja que pertencem a mesma estrutura part.
1 #define MAXPARTICULAS 100002 part Particulas[MAXPARTICULAS];
Codigo 5.3.2: Partıculas Ativas
Tendo as partıculas com limite e estrutura definidas, deve-se trabalhar a faixa de
ejecao das partıculas, que depende do objeto que se deseja modelar atraves do uso dos
SP.
45
5.4 Arquitetura Proposta
Para possibilitar que os objetos virtuais sejam inseridos, posicionados e orientados
em tempo real no ambiente virtual, e proposta uma arquitetura de sistema de captura
e processamento de imagem atraves do ARToolKit e implementacao dos objetos virtuais
atraves da OpenGL, com DevC++ como ferramenta de programacao.
A arquitetura proposta e formada pelos seguintes modulos:
• Modulo ARToolKit;
• Modulo Gerador de Objetos Virtuais;
• Submodulo Atualizador.
Existem ainda outras ferramentas para implementacao de sistemas de RA, porem,
envolvem outros tipos de tecnologias para modelagem dos objetos virtuais como grafos
de cenas e renderizacao. Alem do que, de acordo a bibliografia de base, a maioria dos
sistemas de RA utilizam o software ARToolKit para aumentar a realidade.
A Figura 5.4 ilustra a representacao da visao geral da comunicacao entre as partes que
compoem o sistema.
Figura 5.4: Arquitetura Proposta
5.4.1 Modulo ARToolKit
O Modulo ARToolKit e caracterizado pela realizacao da captura de imagens do am-
biente real e identificacao de cartoes marcadores, para insercao dos objetos virtuais no
ambiente real.
46
A funcao main e responsavel por uma outra rotina de inicializacao que contem o
codigo para definicao do caminho dos parametros do dispositivo de vıdeo, da leitura dos
parametros dos marcadores e da camera e configura a janela grafica [Duarte, 2006].
Ja a funcao mainloop e responsavel por um laco que chama varias outras funcoes.
Dentro dela estao contidas as principais chamadas de rotinas de captura de vıdeo, deteccao
de marcadores e desenho de objetos virtuais.
Essas funcoes podem ser vistas nos codigos disponıveis nos Apendices, no final deste
trabalho.
5.4.2 Modulo Gerador de Objetos Virtuais
O Modulo Gerador de Objetos Virtuais e caracterizado pela implementacao dos objetos
virtuais que serao misturados ao ambiente real, no caso deste trabalho os SP.
Com a passagem dos parametros de vıdeo , passa-se para a parte de analise da imagem
capturada pela camera, verificando se ha a existencia de um marcador nesta imagem. Caso
um marcador seja identificado, um novo objeto virtual e gerado para futura exibicao do
mesmo, sobre este marcador.
Este objeto e gerado atraves da ferramenta de programacao Dev C++ utilizando as
bibliotecas do padrao OpenGL.
5.4.3 Submodulo Atualizador
O Submodulo de atualizacao se encontra entre o Modulo ARToolKit e o Modulo de
Geracao de Objetos Virtuais, pois, os objetos virtuais inseridos no ambiente real neste tra-
balho, se encontram em constante movimentacao, ja que se trata de Sistemas de Partıculas
Dinamicos.
Dessa forma, de acordo com os intervalos de tempo, a velocidade da partıcula e alterada
por aceleracoes externas, que acarretam o deslocamento da partıcula, ou seja, a partıcula
ganha uma nova posicao. Essa posicao deve ser alterada a cada novo intervalo de tempo.
Assim, esse submodulo esta entre a geracao e a renderizacao dos objetos.
A arquitetura aqui proposta se baseia em estudos de tecnicas e ferramentas abordados
ao longo dos capıtulos 2, 3, 4 e 5 deste trabalho. No Capıtulo 6 sao apresentados os
detalhes da implementacao do sistema.
47
Capıtulo 6
Implementacao, Resultados eDiscussao
6.1 Introducao
Este capıtulo apresenta, mediante a compreensao do conteudo abordado nos capıtulos
anteriores, a concepcao do sistema baseado em RA utlizando SP em sua implementacao.
Sendo assim, pode-se dizer que a base do sistema e a implentacao dos objetos virtuais
em OpenGL, neste caso os SP, e o software ARToolKit para mixar as imagens virtuais e
as imagens reais.
Ao longo deste capıtulo e descrita a implementacao dos SP, a biblioteca criada para
realizar uma implementacao rapida e generica dos SP, as adequacoes da ferramenta de pro-
gramacao para utilizacao das bibliotecas OpenGL e as adaptacoes realizadas no software
ARToolKit para tornar possıvel a concepcao do sistema.
Para completar, serao apontados os erros apresentados durante a implementacao e os
resultados obtidos devido as limitacoes identificadas no sistema.
6.2 Alteracoes no Software ARToolKit
O ARToolKit e uma ferramenta utlizada para concepcao de sistemas baseados em
RA e tambem para compreensao de suas interfaces. Como apresentado no Capıtulo 5,
o ARToolKit possui diversas versoes. A versao utilizada para este sistema, e a versao
ARToolKit 2.65, pois, esta apresenta suporte nao apenas para VRML (Virtual Reality
Modelling Language), mas tambem para a OpenGL, que e utilizada no desenvolvimento
deste trabalho.
Como e uma ferramenta generica, necessita de alguma modificacoes, exigidas por cada
aplicacao. Esta versao do ARToolKit, apresenta a imagem invertida, devido ao fato de
nao possuir um codigos de reposicionamento dos pixels. Dessa forma, e preciso realizar
sua inversao, para que a imagem esteja posicionada corretamente quando apresentada ao
usuario.
Essa alteracao e feita atraves de um trecho de codigo que e inserido no arquivo prin-
cipal do projeto no ARToolKit, o simple.ccp, realizando o deslocamento da imagem e
48
pocisionando os pixels em suas novas posicoes, como mostra o codigo 6.2.1.
1 for(j=0;j<(ysize/2);j++){ //leitura da matriz, ysize-tamanho da imagem em y2 for(i=0;i<4*xsize;i++){ //xsize = tamanho da imagem em x3 x = dataPtr[i+j*4*xsize]; //deslocamento da imagem4 dataPtr[i+j*4xsize]=dataPtr[i+4*(ysize-j-1)*xsize]; //pixels em nova posic~ao5 dataPtr[i+4*(ysize-j-1)*xsize]=x6 }7 }
Codigo 6.2.1: Codigo de Inversao de Tela
A Figura 6.1 ilustra a imagem de saıda do ARToolKit antes e apos a insercao do codigo
de inversao da imagem.
Figura 6.1: Inversao da tela do ARToolKit
Ainda neste contexto, ha mais um metodo que foi alterado, o metodo keyEvent.
Atraves da alteracao deste metodo foi possıvel realizar interacao com o usuario, atraves
da ativacao de teclas do teclado (Descricao detalhada na secao 6.5.5).
6.3 Geracao dos Objetos Virtuais
Os objetos virtuais utilizados para aumentar a realidade atraves deste trabalho foram
implementados com o uso das bibliotecas OpenGL. Estas modelagens compreendem essen-
cialmente a SP, pois, a OpenGL fornece uma estrutura viavel a concepcao de tais modelos
(Secao 5.3.5).
Como visto no Capıtulo 5, a OpenGL e uma poderosa ferramenta de modelagem 3D.
Deste modo, e possıvel modelar alguns cenarios para possibilitar uma interacao entre os
SP e outras modelagens. Esta modelagem sera descrita na Secao 6.5.2.
A Figura 6.2 ilustra a modelagem de uma cascata com 3 quedas d’agua atraves do uso
de SP e um estadio de futebol, ambos modelados atraves da OpenGL.
O intuito deste trabalho nao se resume a modelagem de apenas um SP visando au-
mentar a realidade, deste modo, para a geracao dos objetos virtuais foram criados alguns
metodos, cada um com sua habilidade, para encapsular as caracterısticas comuns a todos
os SP, modificando as partes que forem necessariamente exigidas para cada aplicacao.
49
Figura 6.2: Modelagens em OpenGL
A secao 4.4.2 descreve a simulacao das partıculas, mostrando as acoes necessarias
para que as partıculas atuem como um sistema unico modelando um objeto. Assim, de
forma simplificada, as partıculas tem de ser geradas, ter seus atributos definidos, serem
renderizadas, morrerem e serem substituıdas por novas partıculas.
Deste modo os metodos apresentados nos trechos de codigo ao longo do capıtulo sao
responsaveis por manter esse ciclo de simulacao das partıculas ativas.
Quando o sistema e inicializado, e necessario iniciar as partıculas, pois, e preciso existir
um numero fixo de partıculas ativas no sistema (secao 5.3.5). Dentro do projeto principal
do ARToolKit, existe um metodo responsavel pela inicializacao de todos os parametros
de vıdeo, orientacao, renderizacao, etc. Este e o metodo init, dentro dele e inserido o
metodo inciaParticulas, mostrado pelo Codigo 6.3.1.
1 void iniciaParticulas (void){2 int n;3 for(n = 0; n< MAXPARTICULAS; n++){ //Limita a inicializac~ao de partıculas4 conceberParticulas(n); //Concebe partıculas5 }6 }/*Fim iniciaParticulas*/
Codigo 6.3.1: Metodo Generico iniciaParticulas
A partir do momento que o SP foi iniciado, e preciso conceber as partıculas do SP.
Existem diversas formas de conceber as partıculas do sistema, mas e necessario observar
a faixa de movimentacao (secao 4.4.1). A faixa de movimentacao limita o espaco que as
partıculas devem percorrer desde a concepcao ate a morte. No momento que as partıculas
sao concebidas, se define a base da faixa de movimentacao e seus atributos.
Por exemplo, para se modelar um tornado, as partıculas devem ser concebidas a partir
de um pequeno cırculo e depois subirem pela faixa de movimentacao, que tera sua base
no cırculo. As partıculas devem ser pequenos pontos gradualmente transparantes para
garantir o efeito Motion Blur (secao 4.5) e terem cor escura como poeira.
Como outro exemplo, para se modelar um gramado de futebol, as partıculas devem
ser concebidas a partir de um quadrado que seria o proprio campo e depois subirem ate
certa altura formando os chumacos de grama. As partıculas devem ser pontos ligados um
50
ao outro, formando linhas e, de preferencia de cor verde sem transparencia.
Dessa forma o metodo conceberParticulas e responsavel pela definicao da forma com
que as partıculas do sistema serao concebidas, definindo a base da faixa de movimentacao,
por onde as partıculas nascerao em posicoes aleatorias dentro desta base, e seus atributos.
Este procedimento e descrito no Codigo 6.3.2.
1 void conceberParticulas (int m){2 GLfloat alpha, beta; //Angulos para definic~ao de circunferencia, cones, etc3 GLfloat raio = num * randomico(); //Raio randomico dentro da faixa4 alpha = num*randomico();5 beta = num* randomico();67 //Posic~ao das partıculas nos eixos X,Y e Z8 Particulas[m].posicao[0]= num;9 Particulas[m].posicao[1]= num;
10 Particulas[m].posicao[2]= num;1112 //Velocidade de movimentac~ao nos eixos X, Y e Z13 Particulas[m].velocidade[0]= num;14 Particulas[m].velocidade[1]= num;15 Particulas[m].velocidade[2]= num;1617 //Acelerac~ao de movimentac~ao nos eixos X, Y e Z18 Particulas[m].aceleracao[0] = num;19 Particulas[m].aceleracao[1] = num;20 Particulas[m].aceleracao[2] = num;2122 //Definic~ao da cor inicial, padr~ao RGB23 Particulas[m].cor[0] = num*randomico();24 Particulas[m].cor[1] = num*randomico();25 Particulas[m].cor[2] = num*randomico();2627 Particulas[m].tempoVida = num*randomico(); //Tempo de vida ativa28 Particulas[m].transparencia = num; //Transparencia29 }
Codigo 6.3.2: Metodo Generico conceberParticulas
Os valores (em todos os metodos) atribuıdos a estrutura deste SP sao completamente
simbolicos, usados apenas para demostrar a concepcao das partıculas, atraves da definicao
da base da faixa de movimentacao e de seus atributos, bem como influencias de forcas
externas, renderizacao, morte das partıculas e atualizacao do sistema, por e usada a
mesma variavel chamada “num”. Para verificar os codigos para funcionamento, consultar
os Apendices.
Assim que sao concebidas, as partıculas inciam sua movimentacao de acordo com a
influencia de forcas externas como simulacao da gravidade, vento, etc. Essas influencias
sao colocadas diretamente sobre cada eixo (X, Y e Z), interferindo na velocidade, ace-
leracao, posicao e qualquer atributo sujeito a alteracoes. O metodo desenhaParticula e
responsavel pela alteracao e renderizacao das partıculas. Caracterizando as forcas exer-
cidas sobre cada uma das partıculas do sistema. O metodo desenhaParticula e mostrado
no Codigo 6.3.3.
Dessa forma as partıculas sao renderizadas de acordo com o comportamento imposto
ao SP (Secao 4.3). Quando o tempo de vida das partıculas chega a zero, e hora dessas
partıculas serem substituıdas por outras. Esse fenomeno e conhecido como morte das
partıculas.
Quando uma partıcula morre, ela deve ser imediatamente substituıda, ja que o sistema
51
necessita de um numero fixo de partıculas ativas. Essa parte de atualizacao do sistema
e extremamente necessaria, pois, o sistema precisa manter a modelagem animada, geral-
mente em constante movimento.
1 void desenhaParticulas(void){2 int f;3 for(f = 0; f<MAXPARTICULAS; f++){ //Alterac~ao de cada partıcula4 //Definic~ao cor padr~ao RGB e transparencia5 glColor4f(Particulas[f].cor[0], Particulas[f].cor[1], Particulas[f].cor[2],Particulas[f].transparencia);6 glPointSize(num); //Tamanho da partıcula como ponto7 glPushMatrix();8 glBegin(GL_POINTS);9 //Desenho de cada ponto
10 glVertex3f(Particulas[f].posicao[0], Particulas[f].posicao[1], Particulas[f].posicao[2]);11 glEnd();12 glPopMatrix();1314 Particulas[f].posicao[0] += Particulas[f].velocidade[0];15 Particulas[f].posicao[1] += Particulas[f].velocidade[1];16 Particulas[f].posicao[2] += Particulas[f].velocidade[2];1718 Particulas[f].velocidade[0] += Particulas[f].aceleracao[0];19 Particulas[f].velocidade[1] += Particulas[f].aceleracao[1];20 Particulas[f].velocidade[2] += Particulas[f].aceleracao[2];212223 Particulas[f].tempoVida -= num; //Decremento do tempo de vida24 Particulas[f].transparencia -= num; //Decremento da transparencia25 extinguirParticulas(f);26 }/*Fim do For*/27 }
Codigo 6.3.3: Metodo Generico desenhaParticulas
O metodo responsavel pela morte das partıculas e o extinguirParticulas. Uma partıcula
pode ser substituıda nao apenas porque seu tempo de vida acabou, mas tambem por que
esta para ultrapassar uma posicao que nao e viavel e, dessa forma, a movimentacao da
partıcula pode ser limitada de acordo com sua posicao, causando a morte da partıcula.
O Codigo 6.3.4 se refere ao metodo extinguirParticulas. Assim que uma partıcula e
morta pelo metodo extinguirParticulas outra e imediatamente concebida pelo metodo
conceberParticulas.
1 void extinguirParticulas (int g){2 if(Particulas[g].tempoVida < num){3 conceberParticulas(g);4 }5 if(Particulas[g].posicao[pos] < num){ //Posic~ao em X pos=1, Y pos=2 e Z pos=36 conceberParticulas(g);7 }8 }/*Fim extinguirParticulas*/
Codigo 6.3.4: Metodo Generico extinguirParticulas
6.4 Cartao Marcador
O cartao marcador utilizado para insercao dos objetos virtuais foi o marcador pattHiro.
Este cartao e padrao da versao 2.65 do ARToolKit. O cartao pode ser visto na Figura
6.3.
52
Figura 6.3: Cartao Marcador [Kirner, 1999]
6.5 Resultados
Atraves das aplicacoes das tecnicas de RA, foi possıvel modelar varias entidades vir-
tuais (SP) atraves dos metodos descritos acima para modelagem em OpenGL. Ao longo
desta secao, sao descritos os resultados alcancados.
6.5.1 Sistemas de Partıculas Simples
A primeira implementacao consiste na modelagem de um SP simples. Desse modo, a
implementacao modela um SP sem cenario, realizando a insercao unicamente do proprio
SP, como a cascata da Figura 6.2.
Para demonstrar este tipo de situacao, foi implementado um tornado. As partıculas
nascem de uma pequena circunferencia e sobem pela faixa de movimentacao (eixo Y) por
influencia de uma forca de suspensao ate certa altura em movimento circular, da mesma
forma que um furacao, obedecendo o mecanismo do proprio fenomeno natural.
A Figura 6.4 ilustra o SP inserido no ambiente real sobre o cartao marcador em sua
primeira versao. O detalhe e que o SP esta muito pequeno. Foi necessario aumentar a
escala do modelo para melhor visualizacao, neste caso, veja a Figura 6.5.
Figura 6.4: SP de tornado - Primeiro Resultado
Neste tipo de sistema baseado em RA utilizando SP, a interacao com o usuario ocorre
direta e naturalmente, pois, o proprio SP e sobreposto sobre o marcador independente-
mente de outra modelagem virtual, possibilitando assim, sua visualizacao direta.
53
Figura 6.5: SP de tornado - Resultado Final
Atraves da Figura 6.5 (a), e possıvel perceber o delay (atraso) que existe ate que o
sistema estabilize sua faixa de movimentacao. Isso ocorre por que no momento da primeira
concepcao, praticamente todas as partıculas nascem ao mesmo tempo e tem seus tempos
de vidas praticamente iguais. Assim as partıculas sao substituıdas aos poucos (Figura
6.5(b)) mantendo o numero de partıculas ativas sempre fixo e os SP com o comportamento
desejado apos alguns segundos (Figura 6.5(c)).
6.5.2 Sistemas de Partıculas Junto com Cenario
Este tipo de aplicacao consiste na modelagem de SP acompanhados por um cenario.
Esse cenario compreende a outra modelagem geralmente estatica que complementa a cena.
Desse modo, e realizada a insercao da modelagem completa no ambiente real, tanto o SP,
quanto o cenario.
Para demonstracao desse tipo de sistema, foram implementados um isqueiro e uma
fonte aquatica. E importante observar que se trata de modelagem de fluidos e fogo, duas
das principais aplicacoes dos SP.
Na modelagem da fonte aquatica, as partıculas nascem a partir do exterior de uma
esfera, parte superior, espalhando-se aleatoriamente em todas as direcoes (eixos X e Z),
limitadas apenas pela faixa de movimentacao (Figura 6.6 (c)). As partıculas sofrem a
forca da gravidade e se movimentam para baixo (Eixo Y) ate atingir o solo, posicao para
morte das partıculas (secao 6.3), como pode ser visto na Figura 6.6 (a).
Ja na modelagem do isqueiro, as partıculas nascem a partir do exterior de uma esfera,
espalhando-se aleatoriamente em todas as direcoes sofrendo forca de suspensao, subindo
pela faixa de movimentacao e se estreitando ao fim (posicao de altura pre-determinada),
moldando o sistema como uma forma de uma chama.
Nas duas modelagens descritas acima, o SP e colocado no topo do cenario (chafariz e
isqueiro) e, dessa forma, os SP devem ser deslocados ate as posicoes adequadas para que
a simulacao ocorra de forma natural.
A Figura 6.6 ilustra a insercao do SP que simula agua para fonte aquatica sobre o
54
marcador.
Figura 6.6: SP de Agua - Cenario: Fonte Aquatica
Atraves da Figura 6.7, pode se ver a modelagem do SP de simulacao de fogo sobre o
isqueiro.
Figura 6.7: SP de Agua - Cenario: Isqueiro
6.5.3 Sistemas de Partıculas Interativos e Agregados
Os SP podem se apresentar de duas formas dentro de uma modelagem que utiliza
algum cenario. O SP pode ser agregado ou interativo.
Quando o SP e agregado, ele faz parte da modelagem. Nesses sistemas, os SP fazem
parte da composicao da modelagem, ao passo que, sem esses SP a modelagem nao estaria
completa. A Figura 6.8(a) e um exemplo. Nesse caso, os jatos propulsores fazem parte
da nave.
No segundo caso, os SP podem ser interativos, isto e, a modelagem interage com o SP.
Nesse caso, o SP nao e parte da composicao da modelagem e, na verdade, se comporta
como uma parte independente que possibilita interacao para melhoria da cena, como na
Figura 6.8(b). As estrelas nao fazem parte da nave, mas ajudam a compor o ambiente,
interagindo com a nave e, portanto, garantindo mais qualidade a cena.
Para demonstrar uma modelagem com SP interativo, a nave espacial da Figura 6.8 foi
modelada junto com o SP para simulacao de estrelas. A dinamica do SP e baseada em um
55
Figura 6.8: SP Agredados e Interativos
cırculo. As partıculas nascem de um cırculo dez vezes maior que a nave e se movimentam
(eixo X) de encontro a nave, dando a sensacao que a nave se encontra em movimento pelo
espaco. Isso pode ser visto na Figura 6.9.
Figura 6.9: SP de Estrelas - SP Interativo
6.5.4 Multiplos Sistemas de Partıculas
Ha ainda a insercao de mais de um SP no ambiente real, dentro da mesma aplicacao.
Neste tipo de sistema sao inseridos um ou mais SP sobre o mesmo marcador, de forma
simples ou ainda acompanhados por um cenario.
Para simulacao deste sistema tambem foi usada a nave da Figura 6.8, mas diferente-
mente do exemplo anterior, de forma a acrescentar dois SP de fogo na nave, um em cada
propulsor (Figura 6.8(a) e Figura 6.10).
A dinamica dos dois propulsores e a mesma. As partıculas nascem a partir de um
cırculo em posicoes aleatorias e sao empurradas (eixo X) para fora do cırculo, se movi-
mentando atraves da faixa de movimentacao. O detalhe e que a faixa de movimentacao
se estreita na extremidade como um cone (atraves do metodo desenhaParticulas, secao
6.3), dando a forma de uma chama propulsora ao SP.
Atraves da Figura 6.10 e possıvel visualizar esta modelagem, seus SP e a nave, todos
sobrepostos sobre o mesmo marcador.
56
Figura 6.10: Multiplos SP de Fogo - Propulsores Nave Espacial
Os SP apresentados nesta aplicacao, possuem a mesma dinamica de simulacao, apenas
com posicoes diferentes. Para melhorar um sistema baseado em RA utilizando SP, pode-
se adequar os metodos apresentados no inıcio do capıtulo, inserindo-se SP com dinamicas
diferentes na mesma aplicacao.
As modelagens da Figura 6.8, embora se relacionem com o mesmo cenario, tem
dinamicas diferentes e, por isso, essas implementacoes serao usadas para demonstracao
desse tipo de sistema.
A implementacao da Figura 6.9 modela um SP de estrelas, que se movimenta de encon-
tro a nave, mas nao modela os propulsores que impulsionam a nave. Ja a implementacao
da Figura 6.10 modela os propulsores da nave, embora esteja em um espaco sem estrelas.
Ao unir essas duas modelagens tem-se uma implementacao de Multiplos Sistemas de
Partıculas, com dinamicas diferentes. A nave tem seus propulsores funcionando viajando
pelo espaco. Atraves da Figura 6.11 e possıvel ver o resultado dessa aplicacao.
Figura 6.11: Multiplos SP com Dinamicas de Simulacao Diferentes
Essa aplicacao apresenta ainda um importante detalhe. Ao unir os SP de fogo e de
estrelas, essa aplicacao uniu um SP interativo com dois SP agregados. Na secao anterior
este mesmo exemplo foi usado para definir estes dois tipos de aplicacoes.
57
6.5.5 Multiplos Sistemas de Partıculas com Interacao do Usuario
A secao 6.2 aborda as alteracoes realizadas no software ARToolKit. O metodo keyEvent
citado em tal secao pode ser editado para possibilitar que o usuario interaja com a
aplicacao.
Este metodo e responsavel pelo tratamento de eventos de entrada a partir do teclado.
Dessa forma, e possıvel que o usuario controle a funcionalidade de sua aplicacao, garantindo
uma manipulacao direta com as informacoes virtuais.
Ao adicionar flags no referido metodo, como mostra o Codigo 6.5.1, o tratamento
das informacoes consequentes ao acionamento de determinada tecla pode modificar a
funcionalidade de sua aplicacao. Cada funcionalidade pode ser relacionada a um flag,
alterando seus parametros quando uma determinada tecla e acionada.
Na aplicacao da Figura 6.11 existem 4 renderizacoes, sendo a renderizacao da nave e
as renderizacoes dos tres SP. Para demonstracao deste tipo de sistema baseado em RA
utilizando SP, esta modelagem sera utilizada.
A cada metodo de renderizacao e atribuıdo um flag. De acordo com o estado do flag, o
metodo de renderizacao e chamado ou nao. Dessa forma, o usuario pode controlar quantos
e quais metodos de renderizacao sao invocados, possibilitando a visualizacao detalhada
da cena, com uma ou mais partes da modelagem em renderizacao ativa.
E importante citar que o usuario pode utilizar esse tipo de interacao de diversas formas,
nao apenas relacionada a renderizacao. O tratamento de acionamento via teclado pode ser
aplicado a funcionalidades de escala, orientacao, translacao, cor, transparencia e alteracao
de outros parametros.
1 int flagestrelas = 1; //Flag de renderizac~ao do SP de estrelas2 int flagpropdir = 1; //Flag de renderizac~ao do SP de fogo direito3 int flagpropesq = 1; //Flag de renderizac~ao do SP de fogo esquerdo4 int flagnave = 1; //Flag de renderizac~ao da nave56 if( key == ’l’ ) { //Habilita renderizac~ao das estrelas7 flagestrelas = 2;8 }9 if( key == ’d’ ) { //Desabilita renderizac~ao das estrelas
10 flagestrelas = 1;11 }12 if( key == ’k’ ) { //Habilita renderizac~ao do propulsor direito13 flagpropdir = 2;14 }15 if( key == ’s’ ) { //Desabilita renderizac~ao do propulsor direto16 flagpropdir = 1;17 }18 if( key == ’j’ ) { //Habilita renderizac~ao do propulsor esquerdo19 flagpropesq = 2;20 }21 if( key == ’a’ ) { //Desabilita renderizac~ao do propulsor esquerdo22 flagpropesq = 1;23 }24 if( key == ’n’ ) { //Habilita renderizac~ao da nave25 flagnave = 2;26 }27 if( key == ’b’ ) { //Desabilita renderizac~ao da nave28 flagnave = 1;29 }
Codigo 6.5.1: Alteracoes no Metodo keyEvent
58
A Figura 6.12 ilustra o tratamento de eventos de teclado para interacao com o usuario,
caracterizando o “I3”da RV: imersao, interacao e imaginacao para com o sistema (Secao
2.3).
Figura 6.12: Controle de Renderizacao dos SP
A Figura 6.12 (a) ilustra a aplicacao ja em funcionamento, mas sem nenhum metodo
de renderizacao habilitado. A Figura 6.12 (b) mostra que o metodo de renderizacao da
nave foi ativado. Para melhor visualizacao do SP de fogo apenas o metodo de renderizacao
do propulsor esquerdo e ativado (Figura 6.12 (c)). Para tornar a aplicacao uma aplicacao
de Multiplos SP, a Figura 6.12 (d) ilustra que o propulsor direito tambem foi renderizado.
Neste estado, a aplicacao se limita a SP agregados. Para transformar a aplicacao
em uma aplicacao com SP interativos, basta desabilitar a renderizacao dos propulsores e
habilitar a renderizacao das estrelas (Figura 6.12 (e)).
Para que aplicacao tenha Multiplos Sistemas de Partıculas dinamicamente diferentes,
basta ativar todas as renderizacoes, como representado na Figura 6.12 (f). Se desejar
visualizar apenas os SP e a dinamica de simulacao de cada um, e necessario de desabilitar
a renderizacao da nave (Figura 6.12 (g)).
A Figura 6.12 (h) mostra o funcionamento de toda a aplicacao com grande extensao
visual, para compreensao de toda a funcionalidade do sistema.
6.5.6 Tipo de Sistema de Realidade Aumentada
Os sistemas de RA sao diferenciados de acordo com os metodos utilizados para mistura
das imagens e sua visualizacao. A Secao 3.4 aborda detalhadamente todos os tipos de
59
sistemas de RA.
Os resultados obtidos durante este trabalho pertencem basicamente a um unico tipo
de sistema, Sistemas de RA Nao Imersivos. Como mostrado na Secao 2.4.1 e Secao 3.4.1,
estes sistemas se caracterizam pela visualizacao indireta do usuario. O usuario nao esta
apto a enxergar a RA olhando diretamente para o marcador e, portanto, e necessario um
dispositivo de fluxo de dados.
Dessa forma, a imagem misturada e apresentada ao usuario atraves de uma tela ou
projecao. Neste sentido, para alcancar esses resultados foi abordado o sistema do tipo
Visao por Vıdeo Baseada em Monitores, detalhada na secao 3.4.4, onde o usuario visualiza
as modelagens aumentadas atraves de renderizacao via monitor, a partir de uma imagem
capturada por uma camera.
Deste modo, as modelagens implementadas visando os resultados descritos nas secoes
anteriores envolvem um sistema de RA Nao Imersivo de Visao por Vıdeo Baseada em
Monitores, ilustrado na Figura 6.13. E possıvel realizar insercao de SP em ambientes
reais utilizando outros tipos de sistema de RA, mas seria necessario diagnosticar algumas
limitacoes apresentadas pelo sistema, abordadas na Secao 6.6.
Figura 6.13: Sistema de RA Nao Imersivo de Visao por Vıdeo Baseada em Monitores
6.5.7 Metodos para Modelagem dos Sistemas de Partıculas
Um importante resultado deste trabalho, foram os metodos genericos apresentados
para modelagem de SP atraves do uso da OpenGL. Os metodos utilizados para essas
modelagens foram descritos ao longo da secao 6.3. A partir da adequacao desses metodos,
e possıvel criar qualquer SP, modificando os parametros de concepcao, faixa de movi-
mentacao e desenho para atender uma aplicacao de comportamento especıfico.
60
6.5.8 Detalhes da Implementacao
A implementacao das aplicacoes ocorreu no predio do Departamento de Ciencia da
Computacao do Campus Catalao da Universidade Federal de Goias (Bloco J). A maquina
utilizada para renderizacao dos SP e apresentacao da tela misturada do ARToolkit possui
placa de vıdeo de 256 Mb, possibiltando uma renderizacao livre de lags em um sistema
de ate 10000 partıculas ativas.
Ainda neste contexto, o Sistema Operacional presente na maquina e o Windows XP e
a ferramenta de programacao utilizanda foi Dev-C++ para modelagem dos SP, e o Visual
Studio 6.0 para interface com a biblioteca ARToolKit.
Para captura das imagens do ambiente real foi utilizada uma webcam Dlink. A luz
ambiente e gerada por um conjunto de 8 lampadas fluorescentes (calhas) visto que a luz
natural que entra no ambiente e praticamente desprezıvel.
O processo de implementacao das aplicacoes consumiu aproxidamente 3 meses, desde
o primeiro resultado (Secao 6.5.1) ate o tratamento de eventos do teclado (Secao 6.5.5).
6.6 Limitacoes e Discussao
Alguns itens que influenciam de alguma forma na realizacao da RA foram observados
durante a implementacao dos modelos.
6.6.1 Iluminacao
Foi observado que o excesso de luz ou mesmo a falta dela apresenta grande influencia
no processo de deteccao dos marcadores. Essa falha na deteccao ocorre principalmente
quando os marcadores sao posicionados no sentido direto da luz ou quando a luz ambiente
e pequena. Neste caso, a localizacao dos marcadores se torna instavel, renderizando os
objetos virtuais em alguns momentos e em outros nao.
Neste contexto, foi utilizado papel A4 para confeccao do cartao marcador, por nao
apresentar alto grau de reflexao de luz, fazendo com que o marcador esteja fosco, visando
impedir problemas de renderizacao relacionados a luz.
6.6.2 Visao da Camera
De acordo com a necessidade de foco, a camera foi reposicionada diversas vezes, nao
apresentando uma posicao fixa para todos os experimentos.
Isso se deve ao fato de que os experimentos apresentam dimensoes e SP diferentes,
fazendo-se necessaria a alteracao do posicionamento (distancia camera x marcador) da
camera diversas vezes, visando capturar mais detalhes (Figura 6.10 (b)), mais posicoes
no espaco (Figura 6.6 (c)), mais angulos de exibicao 3D (Figura 6.12 (f)) ou modelagem
como um todo (Figura 6.11 (d)).
61
A visao da camera ainda depende de outros fatores como luminosidade que afeta a
estabilidade da renderizacao e angulo de captura em relacao ao marcador.
6.6.3 Rastreamento
De acordo com Duarte (2006), o espacamento entre o marcador e a camera nao pode
exceder 2.5m, se tratando do ARToolKit. Mas essa distancia pode ser gradualmente
variada de acordo com a qualidade de imagem da camera ou tamanho dos marcadores.
Por isso, o marcador utilizado foi o de tamanho medio (5 a 9cm), ilustrado na Figura
6.3, que pode ser usado ate uma distancia de 2,0m, para verificacao dos resultados em
toda extensao de modelagens mais robustas (como ilustra a Figura 6.12 (h)).
6.6.4 Renderizacao e Escala
Conforme sao apresentadas algumas implementacoes no Apendice A, muitas modela-
gens necessitam da aplicacao de textura, para garantir um maior grau de realismo.
No entanto, o ARToolKit nao apresenta bom suporte para aplicacao de tais elementos
de modelagem, ocasionando a retirada das texturas aplicadas as modelagens no momento
de renderizacao sobre o marcador. Esse fato pode ser percebido pela comparacao entre a
Figura 6.8 e a Figura 6.9 que ilustra a modelagem da nave espacial.
Outra limitacao apresentada pelo ARToolKit para o recebimento dos SP, foi a questao
de escala. Os SP sao concebidos para vizualizacao bastante detalhada (tela cheia) dentro
da ferramenta de implementacao, Dev C++, mas quando renderizados em RA ficam muito
pequenos, como ilustra a Figura 6.4.
Neste caso e necessario que a escala da modelagem seja aumentada em todos os
tres eixos (3D), garantindo que a modelagem sofra um redimensionamento gradual de
5 unidades (valor utilizado nas implementacoes deste), para que se torne possıvel uma
visualizacao detalhada da aplicacao, como ilustra a Figura 6.5.
O aumento da escala revela outra limitacao do ARToolKit. Com tamanho maior, as
fontes de iluminacao interna para renderizacao demonstram nao funcionar perfeitamente,
ocasionando a perda de informacoes de cor das aplicacoes (novamente sao propostas com-
paracoes entre a Figura 6.8 e a Figura 6.9).
6.6.5 Discussao
Para elaboracao e execucao deste trabalho, foi necessaria uma grande pesquisa biblio-
grafica sobre cada tema apresentado ao longo deste trabaho, de acordo com a disposicao
dos sues capıtulos. Isso porque, nao foram encontradas fontes relacionadas as duas tec-
nologias principais, Realidade Aumentada e Sistemas de Partıculas empregadas em um
mesmo estudo em aplicacoes sobre o ARToolKit, caracterizando a principal motivacao
por tras das pesquisas.
62
Dessa forma, por nao haver publicacoes que relacionam a renderizacao de SP em um
sistema baseado em RA atraves do software ARToolkit, foram constatadas as limitacoes
apresentadas nas subsecoes imediatamente anteriros.
Outra dificuldade identificada, foi a ausencia de dispositivos de fluxos de dados ade-
quados para possibilitar a criacao de outros tipos de sistemas de RA, como por exemplo,
Sistemas Imersivos com Visao Otica Direta ou com Visao Direta por Vıdeo (Secao 3.4),
limitando a criacao de Sistemas Nao Imersivos com Visao por Vıdeo Baseada em Moni-
tores (secao 6.5.6), mas que foi suficiente para mostrar a funcionalidade da construcao de
ambiente com RA utilizando SP.
63
Capıtulo 7
Consideracoes Finais
7.1 Conclusoes
Com base nos estudos realizados durante a elaboracao deste trabalho, foi possıvel
acompanhar a evolucao da expressao cultural da sociedade. Desde tempos antigos, a
humanidade demonstrou necessidade de expressao cultural, tanto de fatos reais quanto
de fatos imaginarios.
Assim, essa expressao ganhou mais forca com o uso da Computacao Grafica, que
facilitou a vida de artistas e pesquisadores, pois, apresenta princıpios de multimıdia ideais
para concepcao de ideias que visam simulacoes para solucoes e conclusoes.
O grande impulso veio com a introducao de modelagens dos graficos 3D, que motivaram
a pesquisa por formas de interacao direta com as modelagens, originando as tecnicas de
Realidade Virtual, onde o usuario pode interagir diretamente com os objetos criados, tanto
se sentindo do mundo virtual (sistemas imersivos) ou apenas os visualizando (sistemas nao
imersivos).
A partir dos estudos, ficou explıcito que com tanta evolucao, logo o olho humano
perceberia facilmente a diferenca entre os objetos virtuais e reais. Uma das abordagens
utilizadas para reducao dessa distancia foi o a Realidade Misturada.
A Realidade Misturada mescla elementos do mundo real com elementos do mundo
virtual em tempo real, tornando uma cena o mais real possıvel, diferente do espoco de
modelagem totalmente virtual da Realidade Virtual.
Uma particularizacao da Realidade Misturada e a Realidade Aumentada, abordagem
trazida neste trabalho, que traz elementos virtuais para o mundo real, preenchendo com
entidades abstratas e despertando o interesse de interacao por parte do usuario.
Dessa forma, a interacao do usuario se torna mais natural por estar visualizando
as entidades virtuais, ao mesmo tempo que as reais. Essas entidades virtuais podem
exigir grande complexidade na modelagem, por nao ter superfıcies definidas com polıgonos
basicos.
A solucao para esses modelos e o uso dos Sistemas de Partıculas, pois, esses reproduzem
tais superfıcies com lealdade e garantem a modelagem de entidades com comportamentos
64
complexos atraves da uniao das partıculas do sistemas, impulsionando as aplicacoes da
Realidade Virtual.
Logo, utilizando as vantagens de interacao direta que os sistemas de Realidade Aumen-
tada oferecem, foi possıvel desenvolver aplicacoes com os Sistemas de Partıculas, de forma
que os mesmos viabilizaram a modelagem de entidades de alta complexidade, propiciando
ao usuario uma interacao natural, com sensacoes novas e animacoes bem semelhantes ao
natural.
Algumas limitacoes foram observadas atraves da verificacao dos resultados obtidos,
como deficiencia na renderizacao de texturas, escala, iluminacao e posicionamento da
camera, mas que nao comprometeram o foco do trabalho.
Finalmente a construcao de ambientes com Realidade Aumentada utilizando Sistemas
de Partıculas proporcionou um novo ciclo de aplicacoes com interacao direta do usuario
com este ambiente contendo informacoes nao estaticas inseridas por meio de entidades
virtuais com comportamentos nao determinısticos, contrariando a maioria dos sistemas
baseados em Realidade Aumentada que se limitam a inserir informacoes estaticas em
determinado ambiente apenas para complementacao do mesmo.
Por fim, essas aplicacoes se tornam poderosas ferramentas de interacao e interface
Homem-Computador da Realidade Virtual e Aumentada, pois, alimenta o desejo de ex-
pressao e perfeicao do homem, abordado ao longo deste trabalho. Principalmente atraves
da criacao do modelos imersivos, onde o real se perde entre o virtual e o virtual se perde
entre o real.
7.2 Trabalhos Futuros
Para melhoria do estudo abordado por este trabalho sugere-se:
• Melhoria nos parametros de iluminacao interna do software ARToolKit;
• Melhoria nos padroes de informacoes de cor das modelagens ao serem renderizadas
sobre os marcadores;
• Melhoria na renderizacao das modelagens como aplicacao de texturas;
• Melhoria na modelagem dos SP, garantindo efeito Motion Blur no processo de render-
izacao sobre os marcadores;
• Estender a construcao de ambientes com RA utilizando SP para todos os tipos de
sistema de RA;
• Aumentar o tratamento de eventos para otimizar a interacao do usuario com a mode-
lagem renderizada;
65
• Estender as modelagens dos SP para os tipos de SP Estruturados e Orientados, as-
sim como as implementacoes ja apresentadas para construcao de ferramentas de
interacao;
• Ampliar o grau de visao da camera para concepcao de ferramentas de treinamento
profissional, jogos interativos, entre outras aplicacoes com modelagens maiores;
• Melhoria do rastreamento sobre a imagem capturada para melhor movimentacao das
partıculas pela faixa de movimentacao.
66
Referencias
Aukstakalnis, S. e Blatner, D. (1992). Silicon Mirage: The Art and Science of Virtual
Reality. Peatchpit Press, Berkeley, CA, USA.
Azevedo, E. e Conci, A. (2004). Computacao Grafica Teoria e Pratica. Editora Campos,
Rio de Janeiro, RJ, Brasil.
Azuma, R. (2001). Recent Advences in Augmented Reality. IEEE Computer Graphics and
Applications.
Billinghurst, M. e Kato, H. (2002). Collaborative Augmented Reality. Communications of
the ACM 2002.
Bimber, O. (2008). Augmented Reality - Part I: Introduction and Overview. Acesso: 2008,
Disponıvel http://www.uni-weimar.de/ bimber/Pub/AR/.
Calonego, N., Consularo, L., Dainese, C., Garbin, T., Kirner, C., Trindade, J., e Fiolhais,
C. (2004). ARToolKit: Aspectos Tecnicos e Aplicacoes Educacionais. Realidade Virtual
- Uma Abordagem Pratica.
Cardoso, A. (2008). Aplicacoes de Realidade Virtual. Acesso: 2008, Disponıvel em:
http://www.compgraf.ufu.br/alexandre/rv/modulo.asp?id=2.
Castro, L. (2008). Laboratorio Virtual de Computacao Natural. Acesso: 2008, Disponıvel
em: http://lsin.unisantos.br/lvcon/tema?tema=6.
Clua, E. (1999). Modelagem Procedimental para Visualizacao de Elementos da Natureza.
Pontıficia Universidade Catolica do Rio de Janeiro, Rio de Janeiro, RJ, Brasil.
Consularo, L., Coelho, R., e Fernandes, M. (2005). Tutorial Sobre ARToolKit. Acesso:
2005, Disponıvel em: http://www.consularo.com/ARToolkit/index.htm.
Cruz-Neira, C. (1992). The CAVE audio Visual Experience Automatic Virtual Enviro-
ment. Communication of the ACM.
Deultz, A. (2008). O Motor de Combustao Interna em 3D. Acesso: 2008, Disponıvel em:
http://www.noticiasautomotivas.com.br/video-o-motor-de-combustao-interna-em-3d/.
Duarte, M. (2006). O Uso da Realidade Aumentada para Medicao de Movimentos. Uni-
versidade Federal de Uberlandia, Uberlandia, MG, Brasil.
Duarte, M. (2008). Introducao a Realidade Virtual e Realidade Aumentada. Universidade
Federal de Goias - Campus Catalao, Catalao, GO, Brasil.
67
Feldman, B. (2003). Animating Suspending Particle Explosion. ACM Transactions on
Graph.
Foster, N. (2000). Modeling Water for Computer Animation. Communications of the
ACM 2000.
Guanabara, G. (2007). Telepresenca Ja e Realidade. Acesso: 2008, Disponıvel em:
http://www.guanabara.info/?p=141.
Hancock, D. (1995). Viewpoint: Virtual Reality in Search of Middle Ground. IEEE
Spectrum.
Holtkamper, T. (2003). Real Time Gaseous Phenomena: A Phenomenological Approach
to Interactive Smoke and Steam. Proceedings of the 2nd International Conference on
Computer Graphics, Virtual Reality, Visualization and Interaction in Africa.
Kato, H. (1999). Marker Tracking and HMD Calibration for a video-based Augmented
Reality Conferencing System. Proceedings of the 2nd International Workshop on Aug-
mented Reality, San Franciso, CA, USA.
Kirner, C. (1999). Sistemas de Realidade Virtual. Acesso: 2008, Disponıvel em:
http://www2.dc.ufscar.br/ grv/tutrv/tutrv.htm.
Kirner, C. e Tori, R. (2004). Introducao a Realidade Virtual, Realidade Misturada e
Hyper-Realidade. 1◦ Edicao, Sao Paulo, SP, Brasil.
Kirner, C., Tori, R., e Siscoutto, R. (2006). Fundamentos da Realidade Aumentada. VIII
Symposium of Virtual Reality.
Manssour, E. (2008). Introducao ao OpenGL. Acesso: 2007, Disponıvel em:
http://www.inf.pucrs.br/ manssour/OpenGL/Tutorial.html.
MCO, B. (2008). Sony actualiza software para compatibilidade de jogos entre PS1 e PS3.
Acesso: 2008, http://newscentermco.blogspot.com/2007/04/sony-actualiza-software-
para.html.
Milgran, P. (1994). Augmented Reality: A Class of Dysplays on Reality-Virtuality Con-
tinuum. Telemanipulator and Telepresence Technologies, SPIE.
Oliva, C. (2004). Modelando Animacoes por Sistemas de Partıculas para Maquinas Agre-
gadas Heterogeneas. Pontıficia Universidade Catolica do Rio Grande do Sul, Porto
Alegre, RS, Brasil.
68
Oliveira, W. (2006). Modelagem 3D com Realidade Virtual - Estudo de Caso: Campus
Virtual. Universidade Federal de Goias - Campus Catalao, Catalao, GO, Brasil.
Pinho, M. e Kirner, C. (1997). Uma Introducao a Realidade Virtual. Acesso: 2007,
Disponıvel em: http://grv.inf.pucrs.br/Pagina/TutRV/tutrv.html.
Reeves, W. (1983). Particle Systems: A Technique for Modeling a Class of Fuzzy Objects.
Research Contributions.
Reeves, W. (1985). Aproximate and Probabilistic Algorithms for Shading and Rendering
Structured Particle Systems. Computer Research Development.
Sims, K. (1990). Particle Animation and Rendering Using Data Pararell Computations.
Proc. of the 17th Annual Conference on Computer Graphics and Interactive Techniques.
Smith, A. (2004). Plants, Fractals and Formal Languages. Computer Graphics.
Tonnesen, D. e Szeliski, R. (1992). Surface Modeling with Oriented Particle Systems.
Proceedings of the 19th Annual Conference on Computer Graphics and Interactive
Techniques.
Tori, R., Kirner, C., e Siscoutto, R. (2006). Fundamentos e Tecnologias de Realidade
Virtual e Aumentada. VIII Symposium of Virtual Reality.
Vince, J. (1995). Virtual Reality Systems. ACM Press Book.
Woo, M., Neider, J., T.Davis, e Shreiner, D. (1999). OpenGL Programming Guide: The
Official Guide to Learn OpenGL. Reading, Massachusetts.
Wright, R. (2000). OpenGL Superbible. Waite Group Press, 2nd Edition.
Wright, R. e Sweet, M. (1996). OpenGL Superbible. Waite Group Press, 1st Edition.
Zorzal, E. (2008). Sistemas de Realidade Aumentada. Acesso: 2008, Disponıvel em:
http://www.realidadeaumentada.com.br.
69
Apendice A
Codigo Fonte
A.1 Fonte Aquatica1 #ifdef _WIN32
2 #include <windows.h>
3 #endif
4 #include <stdio.h>
5 #include <stdlib.h>
6 #ifndef __APPLE__
7 #include <GL/gl.h>
8 #include <GL/glut.h>
9 #else
10 #include <OpenGL/gl.h>
11 #include <GLUT/glut.h>
12 #endif
13 #include <AR/gsub.h>
14 #include <AR/video.h>
15 #include <AR/param.h>
16 #include <AR/ar.h>
17
18 #include <math.h>
19 #include <stdlib.h>
20
21 #ifdef _WIN32
22
23 // EXAMPLES:
24 //
25 // char *vconf = NULL;
26 // char *vconf = "showDlg";
27 // char *vconf = "deviceName=Microsoft DV Camera,videoWidth=720,videoHeight=576";
28 // char *vconf = "ieee1394id=437d3b0201460008,videoWidth=180,videoHeight=144";
29 // char *vconf = "showDlg";
30 char *vconf = "showDlg,deviceName=Microsoft DV Camera,deinterlaceState=on,deinterlaceMethod=blend,"
31 "pixelFormat=PIXELFORMAT_RGB32,videoWidth=320,videoHeight=240";
32
33 /* parameter format is either NULL or a list of tokens, separated by commas ","
34 *
35 * BINARY TOKENS:
36 * --------------
37 * flipH : flip image horizontally (WARNING: non-optimal performance)
38 * flipV : flip image vertically (WARNING: non-optimal performance)
39 * showDlg : displays either WDM capture filter’s property page or
40 * MSDV decoder format dialog (depending on source media type).
41 *
42 * PARAMETRIZED TOKENS:
43 * --------------------
44 * videoWidth=? : preferred video width, EXAMPLE: "videoWidth=720"
45 * videoHeight=? : preferred video height, EXAMPLE: "videoHeight=576"
46 * deviceName=? : preferred WDM device (WARNING: locale-dependent),
47 * i.e. try to match substring <?> with "friendly names" of
48 * enumerated DirectShow WDM wrappers (ksproxy.ax).
49 * EXAMPLE: "deviceName=Microsoft DV Camera" for IEEE1394 DV devices
50 * "deviceName=QuickCam" for Logitech QuickCam
51 * ieee1394id=? : Unique 64-bit device identifier, as defined by IEEE 1394.
52 * Hexadecimal value expected, i.e. "ieee1394id=437d3b0201460008"
53 * Use /bin/IEEE394_id.exe to determine your camera’s ID.
54 *
70
55 * EXAMPLES:
56 *
57 * arVideoOpen(NULL);
58 * arVideoOpen("showDlg");
59 * arVideoOpen("flipH,flipV,showDlg");
60 * arVideoOpen("videoWidth=640,flipH,videoHeight=480,showDlg");
61 * arVideoOpen("deviceName=Microsoft DV Camera,videoWidth=720,videoHeight=480");
62 * arVideoOpen("deviceName=Logitech,videoWidth=320,videoHeight=240,flipV");
63 * arVideoOpen("deviceName=Microsoft DV Camera,ieee1394id=437d3b0201460008");
64 * ...
65 */
66
67 #else
68 char *vconf = "";
69 #endif
70 /*****************************************************************************/
71
72 int xsize, ysize;
73 int escalaX=1;
74 int escalaY=1;
75 int escalaZ=1;
76 int thresh = 100;
77 int count = 0;
78
79 int mode = 1;
80
81 char *cparam_name = "Data/camera_para.dat";
82 ARParam cparam;
83
84 char *patt_name = "Data/patt.hiro";
85 int patt_id;
86 double patt_width = 80.0;
87 double patt_center[2] = {0.0, 0.0};
88 double patt_trans[3][4];
89
90 #define MAXPARTICULAS 1000
91 #define randomico() ((float) rand()/ RAND_MAX)
92 typedef struct{
93 GLfloat posicao[3];
94 GLfloat velocidade[3];
95 GLfloat aceleracao[3];
96 GLfloat raio;
97 GLfloat angulo;
98 GLfloat tempoVida;
99 GLfloat cor[3];
100 GLfloat transparencia;
101 }part;
102
103 part Particulas[MAXPARTICULAS];
104
105 static void init(void);
106 static void cleanup(void);
107 static void keyEvent( unsigned char key, int x, int y);
108 static void mainLoop(void);
109 static void desenhaParticulas(void);
110 static void desenhaChafariz(void);
111 static void desenhaTudo(void);
112 static void discoC(float a, float b, float c);
113 static void discoS(float d);
114 static void extinguirParticulas(int g);
115 static void conceberParticulas(int m);
116 static void iniciaParticulas(void);
117 static void idleF(void);
118 static void draw(double marker_trans[3][4]);
119
120 main(int argc, char *argv[])
121 {
122 init();
123 arVideoCapStart();
124 argMainLoop( NULL, keyEvent, mainLoop );
125 }
126
127 static void keyEvent( unsigned char key, int x, int y)
128 {
71
129 /* quit if the ESC key is pressed */
130 if( key == 0x1b ) {
131 printf("*** %f (frame/sec)\n", (double)count/arUtilTimer());
132 cleanup();
133 exit(0);
134 }
135
136 /* change translation modes */
137 if( key == ’c’ ) {
138 printf("*** %f (frame/sec)\n", (double)count/arUtilTimer());
139 count = 0;
140
141 mode = 1 - mode;
142 if( mode ) printf("Continuous mode: Using arGetTransMatCont.\n");
143 else printf("One shot mode: Using arGetTransMat.\n");
144 }
145
146 /* change the threshold value when ’t’ key pressed */
147 if( key == ’t’ ) {
148 printf("Enter new threshold value (default = 100): ");
149 scanf("%d",&thresh); while( getchar()!=’\n’ );
150 if(thresh < 0) thresh = 0;
151 else if (thresh > 255) thresh = 255;
152 printf("\n");
153 }
154 }
155
156 /* main loop */
157 static void mainLoop(void)
158 {
159 ARUint8 *dataPtr;
160 ARMarkerInfo *marker_info;
161 int marker_num;
162 int j, k;
163
164 /* grab a vide frame */
165 if( (dataPtr = (ARUint8 *)arVideoGetImage()) == NULL ) {
166 arUtilSleep(2);
167 return;
168 }
169 if( count == 0 ) arUtilTimerReset();
170 count++;
171
172 argDrawMode2D();
173 argDispImage( dataPtr, 0,0 );
174
175 /* detect the markers in the video frame */
176 if( arDetectMarker(dataPtr, thresh, &marker_info, &marker_num) < 0 ) {
177 cleanup();
178 exit(0);
179 }
180
181 arVideoCapNext();
182
183 /* check for object visibility */
184 k = -1;
185 for( j = 0; j < marker_num; j++ ) {
186 if( patt_id == marker_info[j].id ) {
187 if( k == -1 ) k = j;
188 else if( marker_info[k].cf < marker_info[j].cf ) k = j;
189 }
190 }
191 if( k == -1 ) {
192 argSwapBuffers();
193 return;
194 }
195
196 /* get the transformation between the marker and the real camera */
197 if(mode == 0) {
198 arGetTransMat(&marker_info[k], patt_center, patt_width, patt_trans);
199 }
200 else {
201 arGetTransMatCont(&marker_info[k], patt_trans, patt_center, patt_width, patt_trans);
202 }
72
203
204 draw(patt_trans);
205
206 argSwapBuffers();
207
208 for (j=0; j<(ysize/2); j++){ // leitura da matriz, ysize = tamanho da imagem no eixo y
209 for (i=0; i<4*xsize; i++){ // xsize = tamanho da imagem no eixo x
210 x = dataPtr[i + j*4*xsize]; // deslocamento da imagem
211 dataPtr[i + j*4*xsize] = dataPtr[i+4*(ysize-j-1)*xsize]; //pixels em novas posic~oes
212 dataPtr[i+4*(ysize-j-1)*xsize] = x;
213 }
214 }
215 }
216
217 static void init( void )
218 {
219 ARParam wparam;
220
221 /* open the video path */
222 if( arVideoOpen( vconf ) < 0 ) exit(0);
223 /* find the size of the window */
224 if( arVideoInqSize(&xsize, &ysize) < 0 ) exit(0);
225 printf("Image size (x,y) = (%d,%d)\n", xsize, ysize);
226
227 /* set the initial camera parameters */
228 if( arParamLoad(cparam_name, 1, &wparam) < 0 ) {
229 printf("Camera parameter load error !!\n");
230 exit(0);
231 }
232 arParamChangeSize( &wparam, xsize, ysize, &cparam );
233 arInitCparam( &cparam );
234 printf("*** Camera Parameter ***\n");
235 arParamDisp( &cparam );
236
237 if( (patt_id=arLoadPatt(patt_name)) < 0 ) {
238 printf("pattern load error !!\n");
239 exit(0);
240 }
241
242 /* open the graphics window */
243 argInit( &cparam, 2.0, 0, 0, 0, 0 );
244
245 iniciaParticulas();
246 }
247
248 /* cleanup function called when program exits */
249 static void cleanup(void)
250 {
251 arVideoCapStop();
252 arVideoClose();
253 argCleanup();
254 }
255
256 //*********************************************************************************************
257 //*********************************************************************************************
258 void desenhaParticulas(void){
259 //glColor3f(1.0f, 1.0f, 1.0f);
260 int f;
261 for(f = 0; f<MAXPARTICULAS; f++){
262 glColor4f(Particulas[f].cor[0], Particulas[f].cor[1], Particulas[f].cor[2], Particulas[f].transparencia);
263 glPointSize(2.0);
264 glPushMatrix();
265 //glTranslatef(0.0,13.5,0.0);
266 glBegin(GL_POINTS);
267 glVertex3f(Particulas[f].posicao[0], Particulas[f].posicao[1], Particulas[f].posicao[2]);
268 glEnd();
269 glPopMatrix();
270
271 Particulas[f].posicao[0] += Particulas[f].velocidade[0];
272 Particulas[f].posicao[1] += Particulas[f].velocidade[1];
273 Particulas[f].posicao[2] += Particulas[f].velocidade[2];
274
275 Particulas[f].velocidade[0] += Particulas[f].aceleracao[0];
276 Particulas[f].velocidade[1] += Particulas[f].aceleracao[1];
73
277 Particulas[f].velocidade[2] += Particulas[f].aceleracao[2];
278
279
280 Particulas[f].tempoVida -= 0.06;
281 Particulas[f].transparencia -= 0.01;
282 extinguirParticulas(f);
283 }/*Fim do For*/
284 glDisable(GL_BLEND);
285 //glutSwapBuffers();
286 }
287
288
289 //********************************************************************************************
290 void desenhaChafariz(){
291 //ativaIluminacao();/*Chama a iluminac~ao*/
292 glColor3f(1.0f, 1.0f, 1.0f);//Bracno
293
294 //Base-----------------------------------------------------------------------------
295 glPushMatrix(); //Base
296 glTranslatef (0.0, -1.0, 0.0);// (x,y,z)
297 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
298 glScalef (escalaX , escalaY, escalaZ);// (Escala)
299 discoC(8.0, 6.0, 1.0);/*AQUI que desenha pela quadrica*/
300 glPopMatrix();
301
302 glPushMatrix(); //Tampa
303 glTranslatef (0.0,-1.0, 0.0);// (x,y,z)
304 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
305 glScalef (escalaX , escalaY, escalaZ);// (Escala)
306 discoC(8.0,0.0,0.0);/*AQUI que desenha pela quadrica*/
307 glPopMatrix();
308
309 //1o Andar------------------------------------------------------------------------
310 glPushMatrix(); //Cilindro Externo
311 glTranslatef (0.0, 0.0, 0.0);// (x,y,z)
312 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
313 glScalef (escalaX , escalaY, escalaZ);// (Escala)
314 discoC(6.0, 6.0, 3.0);/*AQUI que desenha pela quadrica*/
315 glPopMatrix();
316
317 glPushMatrix(); //Cilindro Interno
318 glTranslatef (0.0, 0.0, 0.0);// (x,y,z)
319 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
320 glScalef (escalaX , escalaY, escalaZ);// (Escala)
321 discoC(5.0, 5.0, 3.0);/*AQUI que desenha pela quadrica*/
322 glPopMatrix();
323
324 glPushMatrix(); //Anel
325 glTranslatef (0.0,3.0, 0.0);// (x,y,z)
326 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
327 glScalef (escalaX , escalaY, escalaZ);// (Escala)
328 discoC(6.0,5.0,0.0);/*AQUI que desenha pela quadrica*/
329 glPopMatrix();
330
331 glPushMatrix(); //Tampa
332 glTranslatef (0.0,0.0, 0.0);// (x,y,z)
333 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
334 glScalef (escalaX , escalaY, escalaZ);// (Escala)
335 discoC(6.0,0.0,0.0);/*AQUI que desenha pela quadrica*/
336 glPopMatrix();
337
338 //2o Andar------------------------------------------------------------------------
339 glPushMatrix(); //Cilindro Externo
340 glTranslatef (0.0, 5.0, 0.0);// (x,y,z)
341 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
342 glScalef (escalaX , escalaY, escalaZ);// (Escala)
343 discoC(4.0, 4.0, 2.0);/*AQUI que desenha pela quadrica*/
344 glPopMatrix();
345
346 glPushMatrix(); //Cilindro Interno
347 glTranslatef (0.0, 5.0, 0.0);// (x,y,z)
348 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
349 glScalef (escalaX , escalaY, escalaZ);// (Escala)
350 discoC(3.5, 3.5, 2.0);/*AQUI que desenha pela quadrica*/
74
351 glPopMatrix();
352
353 glPushMatrix(); //Anel
354 glTranslatef (0.0, 7.0, 0.0);// (x,y,z)
355 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
356 glScalef (escalaX , escalaY, escalaZ);// (Escala)
357 discoC(4.0,3.5,0.0);/*AQUI que desenha pela quadrica*/
358 glPopMatrix();
359
360 glPushMatrix(); //Tampa
361 glTranslatef (0.0, 5.0, 0.0);// (x,y,z)
362 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
363 glScalef (escalaX , escalaY, escalaZ);// (Escala)
364 discoC(4.0,0.0,0.0);/*AQUI que desenha pela quadrica*/
365 glPopMatrix();
366
367 glPushMatrix(); //Tampa Curvada
368 glTranslatef (0.0, 4.0, 0.0);// (x,y,z)
369 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
370 glScalef (escalaX , escalaY, escalaZ);// (Escala)
371 discoC(0.0,4.0,1.0);/*AQUI que desenha pela quadrica*/
372 glPopMatrix();
373
374 //3o Andar------------------------------------------------------------------------
375 glPushMatrix(); //Cilindro Externo
376 glTranslatef (0.0, 9.0, 0.0);// (x,y,z)
377 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
378 glScalef (escalaX , escalaY, escalaZ);// (Escala)
379 discoC(2.0, 2.0, 1.0);/*AQUI que desenha pela quadrica*/
380 glPopMatrix();
381
382 glPushMatrix(); //Cilindro Interno
383 glTranslatef (0.0, 9.0, 0.0);// (x,y,z)
384 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
385 glScalef (escalaX , escalaY, escalaZ);// (Escala)
386 discoC(1.75, 1.75, 1.0);/*AQUI que desenha pela quadrica*/
387 glPopMatrix();
388
389 glPushMatrix(); //Anel
390 glTranslatef (0.0, 10.0, 0.0);// (x,y,z)
391 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
392 glScalef (escalaX , escalaY, escalaZ);// (Escala)
393 discoC(2.0,1.75,0.0);/*AQUI que desenha pela quadrica*/
394 glPopMatrix();
395
396 glPushMatrix(); //Tampa
397 glTranslatef (0.0, 9.0, 0.0);// (x,y,z)
398 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
399 glScalef (escalaX , escalaY, escalaZ);// (Escala)
400 discoC(2.0,0.0,0.0);/*AQUI que desenha pela quadrica*/
401 glPopMatrix();
402
403 glPushMatrix(); //Tampa Curvada
404 glTranslatef (0.0, 8.5, 0.0);// (x,y,z)
405 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
406 glScalef (escalaX , escalaY, escalaZ);// (Escala)
407 discoC(0.0,2.0,0.5);/*AQUI que desenha pela quadrica*/
408 glPopMatrix();
409
410 //Pilares ------------------------------------------------------------------------
411 glPushMatrix(); //1o para 2o andar
412 glTranslatef (0.0, 0.0, 0.0);// (x,y,z)
413 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
414 glScalef (escalaX , escalaY, escalaZ);// (Escala)
415 discoC(0.5, 0.5, 5.0);/*AQUI que desenha pela quadrica*/
416 glPopMatrix();
417
418 glPushMatrix(); //2o para 3o andar
419 glTranslatef (0.0, 5.0, 0.0);// (x,y,z)
420 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
421 glScalef (escalaX , escalaY, escalaZ);// (Escala)
422 discoC(0.375, 0.375, 4.0);/*AQUI que desenha pela quadrica*/
423 glPopMatrix();
424
75
425
426 glPushMatrix(); //3o para flor
427 glTranslatef (0.0, 9.0, 0.0);// (x,y,z)
428 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
429 glScalef (escalaX , escalaY, escalaZ);// (Escala)
430 discoC(0.25, 0.25, 3.0);/*AQUI que desenha pela quadrica*/
431 glPopMatrix();
432
433 //Flor---------------------------------------------------------------------------
434 glPushMatrix();
435 glTranslatef (0.0, 12.0, 0.0);// (x,y,z)
436 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
437 glScalef (escalaX , escalaY, escalaZ);// (Escala)
438 discoC(0.25, 0.4, 1.6);/*AQUI que desenha pela quadrica*/
439 glPopMatrix();
440
441 glPushMatrix();
442 glTranslatef (0.0, 12.0, 0.0);// (x,y,z)
443 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
444 glScalef (escalaX , escalaY, escalaZ);// (Escala)
445 discoC(0.25, 0.6, 1.4);/*AQUI que desenha pela quadrica*/
446 glPopMatrix();
447
448 glPushMatrix();
449 glTranslatef (0.0, 12.0, 0.0);// (x,y,z)
450 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
451 glScalef (escalaX , escalaY, escalaZ);// (Escala)
452 discoC(0.25, 0.8, 1.2);/*AQUI que desenha pela quadrica*/
453 glPopMatrix();
454
455 glPushMatrix(); //Inıcio no Projeto
456 glTranslatef (0.0, 12.0, 0.0);// (x,y,z)
457 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
458 glScalef (escalaX , escalaY, escalaZ);// (Escala)
459 discoC(0.25, 1.0, 1.0);/*AQUI que desenha pela quadrica*/
460 glPopMatrix();
461
462 glPushMatrix();
463 glTranslatef (0.0, 12.0, 0.0);// (x,y,z)
464 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
465 glScalef (escalaX , escalaY, escalaZ);// (Escala)
466 discoC(0.25, 1.2, 0.8);/*AQUI que desenha pela quadrica*/
467 glPopMatrix();
468
469 glPushMatrix();
470 glTranslatef (0.0, 12.0, 0.0);// (x,y,z)
471 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
472 glScalef (escalaX , escalaY, escalaZ);// (Escala)
473 discoC(0.25, 1.4, 0.6);/*AQUI que desenha pela quadrica*/
474 glPopMatrix();
475
476 glPushMatrix();
477 glTranslatef (0.0, 12.0, 0.0);// (x,y,z)
478 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
479 glScalef (escalaX , escalaY, escalaZ);// (Escala)
480 discoC(0.25, 1.6, 0.4);/*AQUI que desenha pela quadrica*/
481 glPopMatrix();
482
483 //Linhas-----------------------------------------------------------------------------------
484 glColor3f(1.0f, 0.0f, 0.0f);//Vermelho
485
486 glPushMatrix(); //Linha 1o Andar
487 glTranslatef (0.0, 0.0, 0.0);// (x,y,z)
488 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
489 glScalef (escalaX , escalaY, escalaZ);// (Escala)
490 discoC(6.01, 6.01, 0.2);/*AQUI que desenha pela quadrica*/
491 glPopMatrix();
492
493 glPushMatrix(); //Linha 2o Andar
494 glTranslatef (0.0, 5.0, 0.0);// (x,y,z)
495 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
496 glScalef (escalaX , escalaY, escalaZ);// (Escala)
497 discoC(4.01, 4.01, 0.2);/*AQUI que desenha pela quadrica*/
498 glPopMatrix();
76
499
500 glPushMatrix(); //Linha 3o Andar
501 glTranslatef (0.0, 9.0, 0.0);// (x,y,z)
502 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
503 glScalef (escalaX , escalaY, escalaZ);// (Escala)
504 discoC(2.01, 2.01, 0.2);/*AQUI que desenha pela quadrica*/
505 glPopMatrix();
506
507
508 //Agua-----------------------------------------------------------------------------------
509 glColor3f(0.0f, 0.0f, 1.0f);//Azul
510
511 glPushMatrix(); //1o Andar
512 glTranslatef (0.0, 2.5, 0.0);// (x,y,z)
513 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
514 glScalef (escalaX , escalaY, escalaZ);// (Escala)
515 discoC(5.0, 0.5, 0.0);/*AQUI que desenha pela quadrica*/
516 glPopMatrix();
517
518 glPushMatrix(); //2o Andar
519 glTranslatef (0.0, 6.5, 0.0);// (x,y,z)
520 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
521 glScalef (escalaX , escalaY, escalaZ);// (Escala)
522 discoC(3.5, 0.37, 0.0);/*AQUI que desenha pela quadrica*/
523 glPopMatrix();
524
525 glPushMatrix(); //3o Andar
526 glTranslatef (0.0, 9.5, 0.0);// (x,y,z)
527 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
528 glScalef (escalaX , escalaY, escalaZ);// (Escala)
529 discoC(1.75, 0.25, 0.0);/*AQUI que desenha pela quadrica*/
530 glPopMatrix();
531
532 }/*Fim desenhaChafariz */
533
534 //*********************************************************************************************
535 void desenhaTudo(void){
536
537 desenhaChafariz();
538 desenhaParticulas();
539
540 }
541
542 //*********************************************************************************************
543 void discoC(GLfloat raioInf, GLfloat raioSup, GLfloat alt){
544 GLUquadricObj* q = gluNewQuadric();
545 gluQuadricDrawStyle(q, GLU_FILL);
546 gluQuadricNormals(q, GLU_SMOOTH);
547 gluQuadricTexture(q, GL_TRUE);
548 gluCylinder(q, raioInf, raioSup, alt, 60,60);
549 gluDeleteQuadric(q);
550 }/*Fim do disco*/
551
552 //*********************************************************************************************
553 void discoS(GLfloat raio){
554 GLUquadricObj* q = gluNewQuadric();
555 gluQuadricDrawStyle(q, GLU_FILL);
556 gluQuadricNormals(q, GLU_SMOOTH);
557 gluQuadricTexture(q, GL_TRUE);
558 gluSphere(q, raio, 60, 60);
559 gluDeleteQuadric(q);
560 }/*Fim do disco*/
561
562 //*********************************************************************************************
563
564 void extinguirParticulas (int g){
565 if(Particulas[g].tempoVida < 0.05){
566 conceberParticulas(g);
567 }
568 if(Particulas[g].posicao[1] < 0.0){
569 conceberParticulas(g);
570 }
571 }/*Fim extinguirParticulas*/
572
77
573 //*********************************************************************************************
574
575 void conceberParticulas (int m){
576 GLfloat alpha, beta;//Angulos, raio
577 GLfloat raio = 1.0 * randomico();//00.008 * randomico() + 0.002;
578 alpha = ((3,14)/3) + ((3,14)/3)* randomico();
579 beta = (3,14/3) + ((3,14)/3)* randomico();
580
581 Particulas[m].posicao[0]= 0.0;//x
582 Particulas[m].posicao[1]= 13.5;//y
583 Particulas[m].posicao[2]= 0.0;//z
584
585 Particulas[m].velocidade[0]= raio * cos(alpha) * sin(beta);//x
586 Particulas[m].velocidade[1]= raio * sin(alpha) * sin(beta);//y
587 Particulas[m].velocidade[2]= raio * cos(beta);//z
588
589 Particulas[m].aceleracao[0] = 0.0;//x
590 Particulas[m].aceleracao[1] = -0.1;//y
591 Particulas[m].aceleracao[2] = 0.0;//z
592
593 Particulas[m].cor[0] = 0.01*randomico();//x
594 Particulas[m].cor[1] = 0.1*randomico();//y
595 Particulas[m].cor[2] = randomico();//z
596
597 Particulas[m].tempoVida = 1.0 + 2.0*randomico();
598 Particulas[m].transparencia = 1.0;
599 }
600
601 //*********************************************************************************************
602
603 void iniciaParticulas (void){
604 int n;
605 for(n = 0; n< MAXPARTICULAS; n++){
606 conceberParticulas(n);
607 }/*Fim do for*/
608 }/*Fim Inicia Particulas*/
609
610 //*********************************************************************************************
611 static void idleF (void){
612 glutPostRedisplay();
613 }
614
615 //*********************************************************************************************
616 static void draw(double patt_trans[3][4])
617 {
618 double gl_para[16];
619 GLfloat mat_ambient[] = {0.0, 0.0, 1.0, 1.0};
620 GLfloat mat_flash[] = {0.0, 0.0, 1.0, 1.0};
621 GLfloat mat_flash_shiny[] = {50.0};
622 GLfloat light_position[] = {100.0,-200.0,200.0,0.0};
623 GLfloat ambi[] = {0.1, 0.1, 0.1, 0.1};
624 GLfloat lightZeroColor[] = {0.9, 0.9, 0.9, 0.1};
625
626 argDrawMode3D();
627 argDraw3dCamera( 0, 0 );
628 glClearDepth( 1.0 );
629 glClear(GL_DEPTH_BUFFER_BIT);
630 glEnable(GL_DEPTH_TEST);
631 glDepthFunc(GL_LEQUAL);
632
633 /* load the camera transformation matrix */
634 argConvGlpara(patt_trans, gl_para);
635 glMatrixMode(GL_MODELVIEW);
636 glLoadMatrixd( gl_para );
637
638 glEnable(GL_LIGHTING);
639 glEnable(GL_LIGHT0);
640 glLightfv(GL_LIGHT0, GL_POSITION, light_position);
641 glLightfv(GL_LIGHT0, GL_AMBIENT, ambi);
642 glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor);
643 glMaterialfv(GL_FRONT, GL_SPECULAR, mat_flash);
644 glMaterialfv(GL_FRONT, GL_SHININESS, mat_flash_shiny);
645 glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
646 glMatrixMode(GL_MODELVIEW);
78
647 glTranslatef( 0.0, 0.0, 25.0 );
648 glRotatef (90.0, 1.0, 0.0, 0.0);
649 glScalef(5.0, 5.0, 5.0);
650 //---------------------------------------------------
651 desenhaTudo();
652 //---------------------------------------------------
653 glDisable( GL_LIGHTING );
654 glDisable( GL_DEPTH_TEST );
655 }
A.2 Nave Espacial com Interacao1 #ifdef _WIN32
2 #include <windows.h>
3 #endif
4 #include <stdio.h>
5 #include <stdlib.h>
6 #ifndef __APPLE__
7 #include <GL/gl.h>
8 #include <GL/glut.h>
9 #else
10 #include <OpenGL/gl.h>
11 #include <GLUT/glut.h>
12 #endif
13 #include <AR/gsub.h>
14 #include <AR/video.h>
15 #include <AR/param.h>
16 #include <AR/ar.h>
17
18 #include <math.h>
19 #include <stdlib.h>
20
21 #ifdef _WIN32
22
23 // EXAMPLES:
24 //
25 // char *vconf = NULL;
26 // char *vconf = "showDlg";
27 // char *vconf = "deviceName=Microsoft DV Camera,videoWidth=720,videoHeight=576";
28 // char *vconf = "ieee1394id=437d3b0201460008,videoWidth=180,videoHeight=144";
29 // char *vconf = "showDlg";
30 char *vconf = "showDlg,deviceName=Microsoft DV Camera,deinterlaceState=on,deinterlaceMethod=blend,"
31 "pixelFormat=PIXELFORMAT_RGB32,videoWidth=320,videoHeight=240";
32
33 /* parameter format is either NULL or a list of tokens, separated by commas ","
34 *
35 * BINARY TOKENS:
36 * --------------
37 * flipH : flip image horizontally (WARNING: non-optimal performance)
38 * flipV : flip image vertically (WARNING: non-optimal performance)
39 * showDlg : displays either WDM capture filter’s property page or
40 * MSDV decoder format dialog (depending on source media type).
41 *
42 * PARAMETRIZED TOKENS:
43 * --------------------
44 * videoWidth=? : preferred video width, EXAMPLE: "videoWidth=720"
45 * videoHeight=? : preferred video height, EXAMPLE: "videoHeight=576"
46 * deviceName=? : preferred WDM device (WARNING: locale-dependent),
47 * i.e. try to match substring <?> with "friendly names" of
48 * enumerated DirectShow WDM wrappers (ksproxy.ax).
49 * EXAMPLE: "deviceName=Microsoft DV Camera" for IEEE1394 DV devices
50 * "deviceName=QuickCam" for Logitech QuickCam
51 * ieee1394id=? : Unique 64-bit device identifier, as defined by IEEE 1394.
52 * Hexadecimal value expected, i.e. "ieee1394id=437d3b0201460008"
53 * Use /bin/IEEE394_id.exe to determine your camera’s ID.
54 *
55 * EXAMPLES:
56 *
57 * arVideoOpen(NULL);
58 * arVideoOpen("showDlg");
59 * arVideoOpen("flipH,flipV,showDlg");
60 * arVideoOpen("videoWidth=640,flipH,videoHeight=480,showDlg");
61 * arVideoOpen("deviceName=Microsoft DV Camera,videoWidth=720,videoHeight=480");
79
62 * arVideoOpen("deviceName=Logitech,videoWidth=320,videoHeight=240,flipV");
63 * arVideoOpen("deviceName=Microsoft DV Camera,ieee1394id=437d3b0201460008");
64 * ...
65 */
66
67 #else
68 char *vconf = "";
69 #endif
70 /*****************************************************************************/
71
72 int xsize, ysize;
73 int escalaX=1;
74 int escalaY=1;
75 int escalaZ=1;
76 int thresh = 100;
77 int count = 0;
78 int mode = 1;
79
80 char *cparam_name = "Data/camera_para.dat";
81 ARParam cparam;
82
83 char *patt_name = "Data/patt.hiro";
84 int patt_id;
85 double patt_width = 80.0;
86 double patt_center[2] = {0.0, 0.0};
87 double patt_trans[3][4];
88
89 int flagestrelas = 1;
90 int flagpropdir = 1;
91 int flagpropesq = 1;
92 int flagnave = 1;
93
94 #define MAXPARTICULAS 1000
95 #define randomico() ((float) rand()/ RAND_MAX)
96
97 typedef struct{
98 GLfloat posicao3[3];
99 GLfloat velocidade3[3];
100
101 GLfloat posicao[3];
102 GLfloat velocidade[3];
103 GLfloat aceleracao[3];
104 GLfloat cor[3];
105 GLfloat tempoVida;
106 GLfloat transparencia;
107
108 GLfloat posicao2[3];
109 GLfloat velocidade2[3];
110 GLfloat aceleracao2[3];
111 GLfloat cor2[3];
112 GLfloat tempoVida2;
113 GLfloat transparencia2;
114
115
116 }part;
117
118 part Particulas[MAXPARTICULAS];
119
120 static void init(void);
121 static void cleanup(void);
122 static void keyEvent( unsigned char key, int x, int y);
123 static void mainLoop(void);
124 static void particulas(void);
125 static void discoC(float a, float b, float c);
126 static void discoS(float d);
127 static void desenhaParticula(void);
128 static void desenhaParticula2(void);
129 static void desenhaAeronave(void);
130 static void desenhaTudo(void);
131 static void extinguirParticulas2(int t);
132 static void extinguirParticulas(int g);
133 static void conceberPart(int s);
134 static void conceberParticulas(int p);
135 static void conceberParticulas2(int q);
80
136 static void iniciaParticulas2(void);
137 static void iniciaParticulas(void);
138 static void idleF(void);
139 static void draw(double marker_trans[3][4]);
140
141 main(int argc, char *argv[])
142 {
143 init();
144 arVideoCapStart();
145 argMainLoop( NULL, keyEvent, mainLoop );
146 }
147
148 static void keyEvent( unsigned char key, int x, int y)
149 {
150 /* quit if the ESC key is pressed */
151 if( key == 0x1b ) {
152 printf("*** %f (frame/sec)\n", (double)count/arUtilTimer());
153 cleanup();
154 exit(0);
155 }
156
157 /* change translation modes */
158 if( key == ’c’ ) {
159 printf("*** %f (frame/sec)\n", (double)count/arUtilTimer());
160 count = 0;
161
162 mode = 1 - mode;
163 if( mode ) printf("Continuous mode: Using arGetTransMatCont.\n");
164 else printf("One shot mode: Using arGetTransMat.\n");
165 }
166
167 /* change the threshold value when ’t’ key pressed */
168 if( key == ’t’ ) {
169 printf("Enter new threshold value (default = 100): ");
170 scanf("%d",&thresh); while( getchar()!=’\n’ );
171 if(thresh < 0) thresh = 0;
172 else if (thresh > 255) thresh = 255;
173 printf("\n");
174 }
175 if( key == ’l’ ) {
176 flagestrelas = 2;
177 }
178 if( key == ’d’ ) {
179 flagestrelas = 1;
180 }
181 if( key == ’k’ ) {
182 flagpropdir = 2;
183 }
184 if( key == ’s’ ) {
185 flagpropdir = 1;
186 }
187 if( key == ’j’ ) {
188 flagpropesq = 2;
189 }
190 if( key == ’a’ ) {
191 flagpropesq = 1;
192 }
193 if( key == ’n’ ) {
194 flagnave = 2;
195 }
196 if( key == ’b’ ) {
197 flagnave = 1;
198 }
199 }
200
201 /* main loop */
202 static void mainLoop(void)
203 {
204 ARUint8 *dataPtr;
205 ARMarkerInfo *marker_info;
206 int marker_num;
207 int j, k;
208
209 /* grab a vide frame */
81
210 if( (dataPtr = (ARUint8 *)arVideoGetImage()) == NULL ) {
211 arUtilSleep(2);
212 return;
213 }
214 if( count == 0 ) arUtilTimerReset();
215 count++;
216
217 argDrawMode2D();
218 argDispImage( dataPtr, 0,0 );
219
220 /* detect the markers in the video frame */
221 if( arDetectMarker(dataPtr, thresh, &marker_info, &marker_num) < 0 ) {
222 cleanup();
223 exit(0);
224 }
225
226 arVideoCapNext();
227
228 /* check for object visibility */
229 k = -1;
230 for( j = 0; j < marker_num; j++ ) {
231 if( patt_id == marker_info[j].id ) {
232 if( k == -1 ) k = j;
233 else if( marker_info[k].cf < marker_info[j].cf ) k = j;
234 }
235 }
236 if( k == -1 ) {
237 argSwapBuffers();
238 return;
239 }
240
241 /* get the transformation between the marker and the real camera */
242 if(mode == 0) {
243 arGetTransMat(&marker_info[k], patt_center, patt_width, patt_trans);
244 }
245 else {
246 arGetTransMatCont(&marker_info[k], patt_trans, patt_center, patt_width, patt_trans);
247 }
248
249 draw(patt_trans);
250
251 argSwapBuffers();
252
253 for (j=0; j<(ysize/2); j++){ // leitura da matriz, ysize = tamanho da imagem no eixo y
254 for (i=0; i<4*xsize; i++){ // xsize = tamanho da imagem no eixo x
255 x = dataPtr[i + j*4*xsize]; // deslocamento da imagem
256 dataPtr[i + j*4*xsize] = dataPtr[i+4*(ysize-j-1)*xsize]; //pixels em novas posic~oes
257 dataPtr[i+4*(ysize-j-1)*xsize] = x;
258 }
259 }
260 }
261
262 static void init( void )
263 {
264 ARParam wparam;
265
266 /* open the video path */
267 if( arVideoOpen( vconf ) < 0 ) exit(0);
268 /* find the size of the window */
269 if( arVideoInqSize(&xsize, &ysize) < 0 ) exit(0);
270 printf("Image size (x,y) = (%d,%d)\n", xsize, ysize);
271
272 /* set the initial camera parameters */
273 if( arParamLoad(cparam_name, 1, &wparam) < 0 ) {
274 printf("Camera parameter load error !!\n");
275 exit(0);
276 }
277 arParamChangeSize( &wparam, xsize, ysize, &cparam );
278 arInitCparam( &cparam );
279 printf("*** Camera Parameter ***\n");
280 arParamDisp( &cparam );
281
282 if( (patt_id=arLoadPatt(patt_name)) < 0 ) {
283 printf("pattern load error !!\n");
82
284 exit(0);
285 }
286
287 /* open the graphics window */
288 argInit( &cparam, 2.0, 0, 0, 0, 0 );
289
290 iniciaParticulas2();
291 }
292
293 /* cleanup function called when program exits */
294 static void cleanup(void)
295 {
296 arVideoCapStop();
297 arVideoClose();
298 argCleanup();
299 }
300
301 //*********************************************************************************************
302 //*********************************************************************************************
303 void particulas(void){
304 int k;
305 for(k = 0; k<MAXPARTICULAS; k++){
306 glPointSize(2.0);
307 glBegin(GL_POINTS);
308 glVertex3f(Particulas[k].posicao3[0], Particulas[k].posicao3[1], Particulas[k].posicao3[2]);
309 glEnd();
310 //Se for para ser estatico N~ao tem as linhas abaixo!
311 Particulas[k].posicao3[0] = Particulas[k].posicao3[0] + Particulas[k].velocidade3[0];
312 Particulas[k].posicao3[1] = Particulas[k].posicao3[1] + Particulas[k].velocidade3[1];
313 Particulas[k].posicao3[2] = Particulas[k].posicao3[2] + Particulas[k].velocidade3[2];
314 //Extingui Vencidas e chama as novas
315 extinguirParticulas2(k);
316 }
317 }
318
319 void desenhaParticula(void){//Propusor Esquerdo
320 int f;
321 for(f = 0; f<MAXPARTICULAS; f++){
322 glColor4f(Particulas[f].cor[0], Particulas[f].cor[1], Particulas[f].cor[2], Particulas[f].transparencia);
323 glPointSize(2.0);
324 glPushMatrix();
325 glTranslatef (-5.5, 1.0, 4.7);
326 glBegin(GL_POINTS);
327 glVertex3f(Particulas[f].posicao[0], Particulas[f].posicao[1], Particulas[f].posicao[2]);
328 glEnd();
329 glPopMatrix();
330 //Se for para ser estatico N~ao tem as linhas abaixo!
331 Particulas[f].posicao[0] += Particulas[f].velocidade[0];
332 Particulas[f].posicao[1] += Particulas[f].velocidade[1];
333 Particulas[f].posicao[2] += Particulas[f].velocidade[2];
334
335 Particulas[f].tempoVida -= 0.01;
336 Particulas[f].transparencia -= 0.01;
337
338 extinguirParticulas(f);
339 }/*Fim do For*/
340 }
341
342 void desenhaParticula2(void){//Propusor Direito
343 int w;
344 for( w= 0; w<MAXPARTICULAS; w++){
345 glColor4f(Particulas[w].cor2[0], Particulas[w].cor2[1], Particulas[w].cor2[2], Particulas[w].transparencia2);
346 glPointSize(2.0);
347 glPushMatrix();
348 glTranslatef (5.5, 1.0, 4.7);
349 glBegin(GL_POINTS);
350 glVertex3f(Particulas[w].posicao2[0], Particulas[w].posicao2[1], Particulas[w].posicao2[2]);
351 glEnd();
352 glPopMatrix();
353 //Se for para ser estatico N~ao tem as linhas abaixo!
354 Particulas[w].posicao2[0] += Particulas[w].velocidade2[0];
355 Particulas[w].posicao2[1] += Particulas[w].velocidade2[1];
356 Particulas[w].posicao2[2] += Particulas[w].velocidade2[2];
357
83
358 Particulas[w].tempoVida2 -= 0.01;
359 Particulas[w].transparencia2 -= 0.01;
360
361 extinguirParticulas(w);
362 }/*Fim do For*/
363 }
364 //********************************************************************************************
365 void desenhaAeronave(){
366 glColor3f(1.0f, 1.0f, 1.0f);
367
368 //Corpo da nave 1------------------------------------------------------------------------
369 glPushMatrix();
370 glTranslatef (0.0, 0.0, 0.0);// (x,y,z)
371 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
372 glScalef (escalaX , escalaY, escalaZ);// (Escala)
373 discoC(5.0, 5.0, 2.0);/*AQUI que desenha pela quadrica*/
374 glPopMatrix();
375
376 //Teto ---------------------------------------------------------------------------------
377 glPushMatrix();
378 glTranslatef (0.0, 2.0, 0.0);// (x,y,z)
379 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
380 glScalef (escalaX , escalaY, escalaZ);// (Escala)
381 discoC(5.0, 0.0, 1.0);/*AQUI que desenha pela quadrica*/
382 glPopMatrix();
383
384 //Piso---------------------------------------------------------------------------------
385 glPushMatrix();
386 glTranslatef (0.0, -1.0, 0.0);// (x,y,z)
387 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
388 glScalef (escalaX , escalaY, escalaZ);// (Escala)
389 discoC(0.0, 5.0, 1.0);/*AQUI que desenha pela quadrica*/
390 glPopMatrix();
391
392 //Teto2---------------------------------------------------------------------------------
393 glPushMatrix();
394 glTranslatef (0.0, 7.0, -3.0);// (x,y,z)
395 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
396 glScalef (escalaX , escalaY, escalaZ);// (Escala)
397 discoC(3.0, 0.0, 1.0);/*AQUI que desenha pela quadrica*/
398 glPopMatrix();
399
400 //Piso2--------------------------------------------------------------------------------
401 glPushMatrix();
402 glTranslatef (0.0, 4.0, -3.0);// (x,y,z)
403 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
404 glScalef (escalaX , escalaY, escalaZ);// (Escala)
405 discoC(0.0, 3.0, 1.0);/*AQUI que desenha pela quadrica*/
406 glPopMatrix();
407
408 //Fogutes-------------------------------------------------------------------------------
409 glPushMatrix();
410 glTranslatef (-5.5, 1.0, 0.0);// (x,y,z)
411 glRotatef (0.0, 0.0, 0.0, 0.0);// (Angulo,x,y,z)
412 glScalef (escalaX , escalaY, escalaZ);// (Escala)
413 discoC(1.0, 0.5, 4.0);/*AQUI que desenha pela quadrica*/
414 glPopMatrix();
415
416 glPushMatrix();
417 glTranslatef (5.5, 1.0, 0.0);// (x,y,z)
418 glRotatef (0.0, 0.0, 0.0, 0.0);// (Angulo,x,y,z)
419 glScalef (escalaX , escalaY, escalaZ);// (Escala)
420 discoC(1.0, 0.5, 4.0);/*AQUI que desenha pela quadrica*/
421 glPopMatrix();
422
423 //Tampas--------------------------------------------------------------------------------
424 glPushMatrix();
425 glTranslatef (-5.5, 1.0, 0.0);// (x,y,z)
426 glRotatef (0.0, 0.0, 0.0, 0.0);// (Angulo,x,y,z)
427 glScalef (escalaX , escalaY, escalaZ);// (Escala)
428 discoS(1.0);/*AQUI que desenha pela quadrica*/
429 glPopMatrix();
430
431 glPushMatrix();
84
432 glTranslatef (5.5, 1.0, 0.0);// (x,y,z)
433 glRotatef (0.0, 0.0, 0.0, 0.0);// (Angulo,x,y,z)
434 glScalef (escalaX , escalaY, escalaZ);// (Escala)
435 discoS(1.0);/*AQUI que desenha pela quadrica*/
436 glPopMatrix();
437
438 //Liga--------------------------------------------------------------------------------
439 glPushMatrix();
440 glTranslatef (0.0, 0.0, 0.0);// (x,y,z)
441 glRotatef (240.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
442 glScalef (escalaX , escalaY, escalaZ);// (Escala)
443 discoC(1.0, 1.0, 7.0);/*AQUI que desenha pela quadrica*/
444 glPopMatrix();
445
446 //Saıdas foguetes---------------------------------------------------------------------
447 glPushMatrix();
448 glColor3f(1.0f, 0.0f, 0.0f);
449 glTranslatef (-5.5, 1.0, 4.0);// (x,y,z)
450 glRotatef (0.0, 0.0, 0.0, 0.0);// (Angulo,x,y,z)
451 glScalef (escalaX , escalaY, escalaZ);// (Escala)
452 discoC(0.5, 1.0, 0.7);/*AQUI que desenha pela quadrica*/
453 glPopMatrix();
454
455 glPushMatrix();
456 glTranslatef (5.5, 1.0, 4.0);// (x,y,z)
457 glRotatef (0.0, 0.0, 0.0, 0.0);// (Angulo,x,y,z)
458 glScalef (escalaX , escalaY, escalaZ);// (Escala)
459 discoC(0.5, 1.0, 0.7);/*AQUI que desenha pela quadrica*/
460 glPopMatrix();
461
462 //Corpo da nave 2------------------------------------------------------------------------
463 glPushMatrix();
464 glColor3f(1.0f, 1.0f, 1.0f);
465 glTranslatef (0.0, 5.0, -3.0);// (x,y,z)
466 glRotatef (-90.0, 1.0, 0.0, 0.0);// (Angulo,x,y,z)
467 glScalef (escalaX , escalaY, escalaZ);// (Escala)
468 discoC(3.0, 3.0, 2.0);/*AQUI que desenha pela quadrica*/
469 glPopMatrix();
470
471 }/*Fim desenha aeronave*/
472
473 //*********************************************************************************************
474 void desenhaTudo(void){
475
476 if(flagnave == 2){
477 desenhaAeronave();
478 }
479
480 if(flagpropdir == 2){
481 desenhaParticula();
482 }
483
484 if(flagpropesq == 2){
485 desenhaParticula2();
486 }
487
488 if(flagestrelas == 2){
489 particulas();
490 }
491
492 }
493 //*********************************************************************************************
494 void discoC(GLfloat raioInf, GLfloat raioSup, GLfloat alt){
495 GLUquadricObj* q = gluNewQuadric();
496 gluQuadricDrawStyle(q, GLU_FILL);
497 gluQuadricNormals(q, GLU_SMOOTH);
498 gluQuadricTexture(q, GL_TRUE);
499 gluCylinder(q, raioInf, raioSup, alt, 60,60);
500 gluDeleteQuadric(q);
501 }/*Fim do disco*/
502
503 //*********************************************************************************************
504 void discoS(GLfloat raio){
505 GLUquadricObj* q = gluNewQuadric();
85
506 gluQuadricDrawStyle(q, GLU_FILL);
507 gluQuadricNormals(q, GLU_SMOOTH);
508 gluQuadricTexture(q, GL_TRUE);
509 gluSphere(q, raio, 60, 60);
510 gluDeleteQuadric(q);
511 }/*Fim do disco*/
512 //*********************************************************************************************
513 void extinguirParticulas2 (int h){
514 if(Particulas[h].posicao3[2] > 22.0){
515 //if(Particulas[i].posicao[1] < -10){
516 conceberPart(h);
517 }
518 }/*Fim extinguirParticulas*/
519
520 void extinguirParticulas (int g){
521 if(Particulas[g].tempoVida < 0.01){
522 conceberParticulas(g);
523 conceberParticulas2(g);
524 }
525 }/*Fim extinguirParticulas*/
526 //*********************************************************************************************
527 void conceberPart(int e){
528 GLfloat raio, angulo;//Raio, Angulo
529 raio = 500 * randomico();//Valor aleatorio de raio ate 50
530 angulo = 2 * (3,14) * randomico();//Valor aleatorio do angulo ate 2 pi
531 Particulas[e].posicao3[0] = raio*cos(angulo);//x
532 Particulas[e].posicao3[1] = raio*sin(angulo);//y
533 Particulas[e].posicao3[2] = -10.0 - 25.0* randomico();//z
534
535 Particulas[e].velocidade3[0]= 0.0;
536 Particulas[e].velocidade3[1]= 0.0;
537 //Particulas[i].velocidade[1]= -1.5 + 0.1*randomico();
538 Particulas[e].velocidade3[2]= 1.5 + 0.1*randomico();
539 //Particulas[i].velocidade[2]= 0.0;
540 }/*Fim conveberParticulas*/
541
542 void conceberParticulas (int m){
543 GLfloat alpha;//Angulos, raio
544 GLfloat raio = 1.0 * randomico();
545 alpha = 2 * (3.14) * randomico();
546
547 //Coordenadas do ponto de origem da partıculas
548 Particulas[m].posicao[0] = raio * cos(alpha);//x0.6
549 Particulas[m].posicao[1] = raio * sin(alpha);//y 10.5
550 Particulas[m].posicao[2] = 0.0;//1.0*randomico();//z
551
552 Particulas[m].velocidade[0]= -Particulas[m].posicao[0]/75;//x
553 Particulas[m].velocidade[1]= -Particulas[m].posicao[1]/75;//y
554 Particulas[m].velocidade[2]= (0.05*raio);//z
555
556
557 Particulas[m].cor[0] = randomico();//x
558 Particulas[m].cor[1] = 0.1*randomico();//y
559 Particulas[m].cor[2] = 0.001*randomico();//z
560
561 Particulas[m].tempoVida = 0.5 + 0.5 * randomico();//Mınimo 0.5, Maximo 1.0
562 Particulas[m].transparencia = 1.0;
563 }/*Fim conveberParticulas*/
564
565
566 void conceberParticulas2 (int s){
567 GLfloat alpha;//Angulos, raio
568 GLfloat raio = 1.0 * randomico();
569 alpha = 2 * (3,14) * randomico();
570
571
572 //Coordenadas do ponto de origem da partıculas
573 Particulas[s].posicao2[0] = raio * cos(alpha);//x0.6
574 Particulas[s].posicao2[1] = raio * sin(alpha);//y 10.5
575 Particulas[s].posicao2[2] = 0.0;//1.0*randomico();//z
576
577 Particulas[s].velocidade2[0]= -Particulas[s].posicao2[0]/75;//x
578 Particulas[s].velocidade2[1]= -Particulas[s].posicao2[1]/75;//y
579 Particulas[s].velocidade2[2]= (0.05*raio);//z
86
580
581
582 Particulas[s].cor2[0] = randomico();//x
583 Particulas[s].cor2[1] = 0.1*randomico();//y
584 Particulas[s].cor2[2] = 0.001*randomico();//z
585
586 Particulas[s].tempoVida2 = 0.5 + 0.5 * randomico();//Mınimo 0.5, Maximo 1.0
587 Particulas[s].transparencia2 = 1.0;
588 }/*Fim conveberParticulas*/
589 //*********************************************************************************************
590 static void iniciaParticulas2 (void){
591 int u;
592 for(u = 0; u< MAXPARTICULAS; u++){
593 conceberPart(u);
594 }
595 }
596
597 void iniciaParticulas (void){
598 int n;
599 for(n = 0; n< MAXPARTICULAS; n++){
600 conceberParticulas(n);
601 conceberParticulas2(n);
602 }/*Fim do for*/
603 }/*Fim Inicia Particulas*/
604 //*********************************************************************************************
605 static void idleF (void){
606 glutPostRedisplay();
607 }
608 //*********************************************************************************************
609 static void draw(double patt_trans[3][4])
610 {
611 double gl_para[16];
612 GLfloat mat_ambient[] = {0.0, 0.0, 1.0, 1.0};
613 GLfloat mat_flash[] = {0.0, 0.0, 1.0, 1.0};
614 GLfloat mat_flash_shiny[] = {50.0};
615 GLfloat light_position[] = {100.0,-200.0,200.0,0.0};
616 GLfloat ambi[] = {0.1, 0.1, 0.1, 0.1};
617 GLfloat lightZeroColor[] = {0.9, 0.9, 0.9, 0.1};
618
619 argDrawMode3D();
620 argDraw3dCamera( 0, 0 );
621 glClearDepth( 1.0 );
622 glClear(GL_DEPTH_BUFFER_BIT);
623 glEnable(GL_DEPTH_TEST);
624 glDepthFunc(GL_LEQUAL);
625
626 /* load the camera transformation matrix */
627 argConvGlpara(patt_trans, gl_para);
628 glMatrixMode(GL_MODELVIEW);
629 glLoadMatrixd( gl_para );
630
631 glEnable(GL_LIGHTING);
632 glEnable(GL_LIGHT0);
633 glLightfv(GL_LIGHT0, GL_POSITION, light_position);
634 glLightfv(GL_LIGHT0, GL_AMBIENT, ambi);
635 glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor);
636 glMaterialfv(GL_FRONT, GL_SPECULAR, mat_flash);
637 glMaterialfv(GL_FRONT, GL_SHININESS, mat_flash_shiny);
638 glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
639 glMatrixMode(GL_MODELVIEW);
640 glTranslatef( 0.0, 0.0, 25.0 );
641 glRotatef (90.0, 1.0, 0.0, 0.0);
642 glScalef(5.0, 5.0, 5.0);
643 //---------------------------------------------------
644 desenhaTudo();
645 //---------------------------------------------------
646 glDisable( GL_LIGHTING );
647 glDisable( GL_DEPTH_TEST );
648 }
87