Construindo Ambientes com Realidade Aumentada Utilizando Sistemas de … · de Assun¸c˜ao,...

104
UNIVERSIDADE FEDERAL DE GOI ´ AS – UFG CAMPUS CATAL ˜ AO – CaC DEPARTAMENTO DE CI ˆ ENCIA DA COMPUTAC ¸ ˜ AO – DCC Bacharelado em Ciˆ encia da Computa¸ ao Projeto Final de Curso Construindo Ambientes com Realidade Aumentada Utilizando Sistemas de Part´ ıculas Autor: F´ abio Gomes de Assun¸ ao Orientador: M´ arcio Antˆ onio Duarte Catal˜ ao - 2008

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