• Nenhum resultado encontrado

E importante ressaltar que os Passos 2 at´e 5 s˜ao repetidos de forma cont´ınua at´e que a aplica¸c˜ao se finalize. J´a os Passos 1 e 6, s˜ao executados para inicializa¸c˜ao e finaliza¸c˜ao da aplica¸c˜ao, respectivamente. Outro fator que pode ser levado em conta, ´e a calibra¸c˜ao da cˆamera, que deve acontecer na primeira vez que o software for executado em uma m´aquina.

5.2.5 Vers˜oes do ARToolKit

V´arias vers˜oes do ARToolKit est˜ao dispon´ıveis e s˜ao implementadas em diversas lin-guagens, como MatLab e Java, embora as vers˜oes mais atualizadas e utilizadas s˜ao as im-plementadas em C [Duarte, 2006]. Destas, algumas oferecem suporte para implementa¸c˜ao em VRML e OpenGL (Se¸c˜ao 5.3).

A vers˜ao escolhida para o desenvolvimento deste trabalho foi a ARToolKit 2.65 com suporte para OpenGL, implementada na linguagem C++

As vers˜oes do ARToolKit acompanham a evolu¸c˜ao do tratamento que os Sistemas Operacionais fornecem aos dispositivos de v´ıdeo. A vers˜ao atual do ARToolKit oferece suporte para RA com Vis˜ao Direta por V´ıdeo ou Vis˜ao Direta ´Optica (descritas deta-lhadamente no Cap´ıtulo 3). A RA por vis˜ao Direta por V´ıdeo ´e aquela cujas imagens virtuais s˜ao sobrepostas `as imagens de v´ıdeo ao vivo capturadas do mundo real.

A segunda op¸c˜ao ´e a RA por Vis˜ao Direta ´Optica, onde os objetos virtuais s˜ao so-brepostos diretamente `as imagens do mundo real percebidas pelo usu´ario. A RA por Vis˜ao Direta requer um dispositivo HMD (Head Mounted Display) (Se¸c˜ao 2.2.5), pois o usu´ario recebe diretamente a informa¸c˜ao misturada e, exige tamb´em, um procedimento de calibra¸c˜ao da cˆamera que adquire imagens do mundo real.

Estes procedimentos podem variar entre algo mais simples, quando a Vis˜ao Direta ´e por V´ıdeo, ou mais complexo, quando ´e por Vis˜ao ´Optica Direta [Calonego et al., 2004].

5.3 A OpenGL

A OpenGL ´e definida por Manssour (2008) como um programa de processamento

gr´afico. Dessa forma, se apresenta como uma biblioteca de rotinas gr´aficas para modela-gem 2D e 3D, possibilitanto uma renderiza¸c˜ao extremamente r´apida.

5.3.1 Hist´orico da OpenGL

O padr˜ao industrial da OpenGL ´e relativamente novo, mas h´a 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 programa¸c˜ao 3D nas esta¸c˜oes daquela empresa. Estes computadores (esta¸c˜oes) eram mais que computadores de prop´osito geral; Tinham hardware especializado e sofisticado para desenvolvimento de gr´aficos.

Os problemas surgiram quando a SGI apresentou um projeto multi-plataforma para

IRIS GL. Surge ent˜ao a OpenGL. A OpenGL foi concebida da jun¸c˜ao da IRIS GL e

dos esfor¸cos da SGI para cria¸c˜ao de uma linguagem melhor adapt´avel a outros Sistemas Operacionais e Hardware. Este novo conceito deveria fornecer as qualidades da GL, por´em seria aberta [Wright e Sweet, 1996].

Em 1992, a primeira especifica¸c˜ao da OpenGL, a vers˜ao OpenGL 1.0, foi introduzida. Esta, causou uma revolu¸c˜ao na 1a Conferˆencia de Desenvolvedores Win32 com aplica¸c˜oes m´edicas, cinematogr´aficas e mais. Como OpenGL deveria ser aberta, foi criada ent˜ao a

Mesa de Revis˜ao da Arquitetura OpenGL pela SGI, Digital Equipament Comporation,

IBM, Intel e Microsoft.

Em 1995, essa mesa de revis˜ao deliberou a especifica¸c˜ao final para a vers˜ao OpenGL 1.1. Esse conselho de revis˜ao se encontra duas vezes por ano para adi¸c˜oes e melhorias na especifica¸c˜ao.

5.3.2 O que ´e a OpenGL?

OpenGL ´e definida como uma interface de software para hardware de processamento gr´afico. Em suma, ´e vista como uma biblioteca de modelagem gr´afica 3D extremamente r´apida e port´atil. Atrav´es da OpenGL, ´e poss´ıvel criar elegantes gr´aficos 3D com grande qualidade visual.

A OpenGL possui a vantagem de apresentar uma ordem de magnitude mais r´apida que Ray-Tracing (T´ecnica de renderiza¸c˜ao 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 gr´afica descritiva. Em vez de descrever a cena e como ela devia aparecer, o programador descreve os passos necess´arios para alcan¸car uma certa aparˆencia ou efeito.

Contudo, OpenGL n˜ao ´e linguagem. Na verdade ´e uma poderosa e sofisticada API para cria¸c˜ao de aplica¸c˜oes gr´aficas 3D (ou tamb´em 2D). Seu funcionamento ´e semelhante ao de uma biblioteca escrita em C, uma vez que fornece uma s´erie de funcionalidades. Geralmente, se diz que um programa ´e baseado em OpenGL ou ´e uma aplica¸c˜ao OpenGL, o que significa que ele ´e escrito em alguma linguagem de programa¸c˜ao (geralmente C) que

faz chamadas a uma ou mais bibliotecas OpenGL [Manssour, 2008].

A OpenGL oferece suporte a ilumina¸c˜ao, coloriza¸c˜ao, mapeamento de textura, transparˆencia, anima¸c˜ao, entre muitos outros efeitos visuais. Dessa forma, a OpenGL passou a ser re-conhecida e aceita como um padr˜ao para desenvolvimento de aplica¸c˜oes gr´aficas 3D em tempo real.

De fato, OpenGL fornece um pequeno conjunto de primitivas gr´aficas para constru-¸c˜ao 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 implementa¸c˜ao OpenGL, ´e que fornecem as v´arias fun¸c˜oes para modelagem, tais como superf´ıcies qu´adricas, curvas e superf´ıcies NURBS (Non Uniform Rational B-Splines), renderiza¸c˜ao, 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 aplica¸c˜ao faz chamadas `as fun¸c˜oes da OpenGL, os comandos requeridos em tais chamadas s˜ao colocados em um buffer de comandos, que ´e preenchido com comandos, v´ertices, dados de textura, etc. Quando este buffer ´e “esvaziado”, os comandos e dados s˜ao emitidos ao pr´oximo est´agio, para receberem efeitos espec´ıficos.

Figura 5.3: Diagrama de Funcionamento da OpenGL [Manssour, 2008]

Ap´os a etapa de aplica¸c˜ao das transforma¸c˜oes geom´etricas e da ilumina¸c˜ao (se n˜ao h´a necessidade de aplica¸c˜ao de tais efeitos, o buffer de comandos emite-os direto para a rasteriza¸c˜ao), ´e feita a rasteriza¸c˜ao, que ´e a gera¸c˜ao da imagem a partir dos dados geom´etricos, de cor e textura. A imagem final, ´e ent˜ao colocada no frame buffer, que ´e a mem´oria do dispositivo gr´afico. Assim, a imagem ´e exibida no monitor [Manssour, 2008].

5.3.4 Utiliza¸c˜ao/Inser¸c˜ao de Bibliotecas OpenGL

Embora a OpenGL seja uma biblioteca de programa¸c˜ao padr˜ao e aberta, existem diversas implementa¸c˜oes para Windows e para Linux. A implementa¸c˜ao utilizada no am-biente Linux ´e a biblioteca Mesa. Tamb´em existem implementa¸c˜oes para os compiladores Visual C++, Borland C++, Dev C++(utilizado para desenvolvimento dos SP), Delphi e Visual Basic.

´

E necess´ario preparar o sistema para o trabalho com as bibliotecas OpenGL. No caso da implementa¸c˜ao com Microsoft (SO utilizado no desenvolvimento deste trabalho), o sistema operacional fornece os arquivos opengl32.dll e glu32.dll, que s˜ao necess´arios para execu¸c˜ao de programas OpenGL. Al´em disso, s˜ao fornecidas com suas ferramentas de programa¸c˜ao (Microsoft Visual C++ ou Dev C++, por exemplo), as bibliotecas opengl32.lib (OpenGL) e glu32.lib (GLU).

Assim, para cria¸c˜ao de programas com ferramentas de programa¸c˜ao Microsoft (ou compat´ıveis) que usem OpenGL, ´e necess´ario adicionar estas duas bibliotecas `a lista de importa¸c˜oes. Os prot´otipos da biblioteca de fun¸c˜oes utilit´arias est˜ao em um arquivo diferente, glu.h. Estes arquivos normalmente est˜ao localizados em uma pasta especial no path do include [Wright, 2000].

Dessa forma, ´e preciso preparar a ferramenta de programa¸c˜ao para realiza¸c˜ao de chamadas de bibliotecas OpenGL, para tornar poss´ıvel a utiliza¸c˜ao 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 espa¸co que possui massa, posi¸c˜ao, velocidade e mais uma s´erie de atributos que est˜ao sujeitos a influˆencias de for¸cas exteriores como a for¸ca da gravidade, por exemplo.

Dessa forma, os atributos das part´ıculas podem ser definidos em uma ´unica estrutura part atrav´es da OpenGL, como mostra o C´odigo 5.3.1.

1 typedef struct{

2 GLfloat posicao[3]; //Posi¸c~ao no espa¸co nos eixos X,Y e Z

3 GLfloat velocidade[3]; //Velocidade nos eixos X,Y e Z

4 GLfloat aceleracao[3]; //Acelera¸c~ao nos eixos X,Y e Z

5 GLfloat cor[3]; //Cor no padr~ao RGB

6 GLfloat transparencia; //Transpar^encia do corpo da part´ıcula

7 GLfloat tempoVida; //Tempo que a part´ıcula encontra-se ativa

8 }part;

C´odigo 5.3.1: Estrutura das Part´ıculas

Define-se um n´umero m´aximo de part´ıculas que devem estar ativas no sistema, como mostra C´odigo 5.3.2 (10.000 part´ıculas ativas no sistema). Todas as part´ıculas ativas no sistemas tˆem os mesmos atributos, j´a que pertencem `a mesma estrutura part.

1 #define MAXPARTICULAS 10000

2 part Particulas[MAXPARTICULAS];

C´odigo 5.3.2: Part´ıculas Ativas

Tendo as part´ıculas com limite e estrutura definidas, deve-se trabalhar a faixa de eje¸c˜ao das part´ıculas, que depende do objeto que se deseja modelar atrav´es do uso dos SP.

Documentos relacionados