• Nenhum resultado encontrado

Abstract This paper discusses some publicly-available technologies in the fields of Computer Graphics, Computer Animation and Virtual Reality, focusin

N/A
N/A
Protected

Academic year: 2021

Share "Abstract This paper discusses some publicly-available technologies in the fields of Computer Graphics, Computer Animation and Virtual Reality, focusin"

Copied!
35
0
0

Texto

(1)

Ferramentas de Programação Livres para

Computação Gráca e Animação por

Computador AlbertoB. Raposo  , Adailton J. A. daCruz ;y , AlessandroL. Bicho  , Alfredo K.Kojima z

, CarlosA. M. dos Santos x , IslaC. F. da Silva  , Léo P. Magalhães  , Paulo C. P.de Andrade z Resumo

Esteartigoabordaumasériedetecnologiasdedomíniopúbliconasáreasde

Com-putação Gráca, Realidade Virtual e Animação por Computador, enfocando

ferra-mentas de programaçãopara apoio ao desenvolvimento de sistemas grácos

intera-tivos. Aprimeiraparteapresentaduastecnologiasdemenorníveldeabstraçãopara

ageraçãodeinterfacesgrácas,formasgeométricaseimagens: XWindowSysteme

OpenGL.A segundaparteapresenta tecnologiasdemais altonível,voltadasparaa

Internet, quepodem serusadas para acriaçãode aplicaçõessosticadas, tais como

mundos virtuaiseanimaçõesinterativas. Dentre estastecnologiasdestacam-se Java

3D e VRML. Java 3D é a biblioteca padrão da linguagem Java para a criação de

programas com grácos tridimensionais. VRML é um padrão muito usado para a

modelagemetransmissãodeinformação3DemundosvirtuaispelaWeb.

Palavras-chave:ComputaçãoGráca,SoftwareLivre,Animação,RealidadeVirtual.



DepartamentodeEngenhariadeComputaçãoeAutomaçãoIndustrial-DCA

FaculdadedeEngenhariaElétricaedeComputaçãoFEEC

UniversidadeEstadualdeCampinasUNICAMP

e-mails:{alberto,ajcruz,bicho,isla,leopini}@dca.fee.unicamp.br

y

CentroUniversitáriodeDourados

UniversidadeFederaldoMatoGrossodoSulUFMS

z

ConectivaInformáticaS.A.

e-mails:{kojima,pcpa}@conectiva.com.br

x

CentrodePesquisasMeteorológicas,UniversidadeFederaldePelotas-UFPel

InstitutodeInformática,UniversidadeFederaldoRioGrandedoSulUFRGS

e-mail:casantos@cpmet.ufpel.tche.br

(2)

Abstract

Thispaperdiscussessomepublicly-availabletechnologiesintheeldsofComputer

Graphics,ComputerAnimation andVirtualReality,focusingonprogrammingtools

tosupportthedevelopmentofinteractivegraphicsystems. Therstpartpresentstwo

technologies oflowerabstraction level, used forthegenerationof graphic interfaces,

geometric drawings and images: the X Window System and OpenGL. The second

partpresentstwohigherabstraction level technologies: Java3D, theJavastandard

libraryfor3Dgraphicsprogramming,andVRML,alanguageforvirtualreality

mod-elling. BothJava3DandVRMLcanbeusedtocreatesophisticatedWWW-oriented

applications,suchasvirtualworldsand interactiveanimations.

Keywords: ComputerGraphics,FreeSoftware,ComputerAnimation,VirtualReality.

1 Introdução

Softwarelivrepodeserdenidocomosoftwaredesenvolvidoporumgrupoamploe

heterogêneodepessoas,empresasegruposacadêmicos,cujadiversidadedeinteresses

impedeque se estabeleça omonopólio de um único fornecedorou fabricante,como

normalmente ocorrecomsoftwarenão-livre.

Recentemente,surgiuumfortemovimentoporpartedeempresasquedesenvolvem

software comercialnosentidode abrirocódigodeseusprodutos, visandoaumentar

sua aceitaçãono mercado, facilitar sua distribuiçãoe fazer uso dos serviçosda

co-munidade para testar o produto e torná-lo compatível com um maior número de

plataformas. Este tipodesoftwareéchamadodeopen source (códigoaberto).

Portanto, o que se pode chamar de genericamente de software de uso

públi-co oudisponívelpublicamente,estádividido em três classes: software livre

(não-proprietário,códigodisponível egratuito), software de códigoaberto (proprietário,

códigodisponívelegratuito)esoftwaregratuito(apenasoexecutávelestádisponível

gratuitamente).

OcrescimentodesoftwarelivreedecódigoabertoemComputaçãoGráca

tam-bém é uma realidade, motivado principalmente pela preocupação com a utilização

depadrõesgrácospara trabalharde formaeciente em diversas plataformas. Este

artigoabordaalgumasferramentasdeprogramaçãolivres(oudecódigoaberto)para

odesenvolvimentodesistemasgrácosinterativos.

Inicialmente,seráestudado oXWindowSystem,um sistemadejanelascom

su-porte àconstrução deaplicaçõesgrácas distribuídas earquiteturacilente-servidor.

DepoisseráapresentadooOpenGL,umaAPI(Application Programmer's Interface)

(3)

incorporadaaqualquersistemadejanelas,inclusiveoX.Java3D,abordadaaseguir,

éabibliotecadalinguagemJavaparaacriaçãodeaplicaçõestridimensionais. Como

toda aplataforma Java, Java3D é, segundo oconceito apresentado anteriormente,

opensource,emboraaSun,proprietáriadosoftware,imponharestriçõesadicionaisà

distribuiçãodocódigo-fonte. Finalmente,seráapresentadaaVRML,uma linguagem

paraamodelagemetransmissãodeinformação3DpelaInternet.

Éimportante ressaltarqueestasferramentassedestinam aodesenvolvimentode

diferentes classes de aplicaçõesgrácas. O X Window System e suas interfaces de

programação(toolikts)sãousadosparaodesenvolvimentodecomponentesgrácosde

interfacesinterativas(janelas,botões,etc.) eprimitivasbásicasdedesenho. OpenGL

éumabibliotecagrácaparaarenderizaçãodeimagensestáticas. Java3DeVRML,

porsuavez,sãovoltadosàWebepossuemrecursossosticadosdeanimação,interação

enavegaçãopormundostridimensionais.

2 X Window System

OXWindow Systemfoi criadoem1984, noMassachusettsInstitute of

Technol-ogy (MIT) [18]. Devidoà suaaceitação nomercado, em 1988 oMIT formou junto

comfabricantesdesoftwareoMITXConsortium,destinadoaproversuportetécnico

e administrativo ao desenvolvimento do sistema. O consórcio tornou-se uma

enti-dadeindependente em1993e,apósváriasfusõesereorganizações,deuorigemauma

organizaçãochamadaTheOpenGroup,quehojedetémosdireitossobreoX.

OpapeldoXConsortiumsemprefoiodeproduzirpadrões,ouseja,especicações

de software,junto comas quaisdistribuía o código-fontede uma implementação de

amostra(SIsampleimplementation). Pode-secriarversõesmodicadas,apartirda

SI(amaioriadosfabricantesdesistemasUNIXcomerciaisfazisso),masoXWindow

System continua sendo um só, denido por suas especicações formais. Qualquer

implementaçãoquenãosigaàriscaasespecicaçõesdeveserconsiderada,nomínimo,

defeituosa.

2.1Arquitetura do XWindow System

X foi concebido para que uma aplicação pudesse funcionar comquaisquer tipos

demonitoresedispositivosdeentrada. Essesdispositivossãotratados,emconjunto,

comoumdisplay (verSeção2.3). Asaplicaçõesdeveriampoderusarqualquerdisplay,

coloridoou monocromático, remoto oulocal, sem que fossenecessário alteraroseu

códigoourecompilá-las,esemperdasensíveldedesempenho. Maisdeumaaplicação

deveriapoderacessarodisplaysimultaneamente,cadaumaapresentandoinformações

emumajanela.

Osistemapossuiarquiteturacliente-servidor. Oservidorlocaliza-senaestaçãode

(4)

comunicaçãoentreclienteseentradadedadospordispositivoscomomouseeteclado.

Osclientes podemserexecutadosnaprópriaestaçãoouremotamente,conectadosao

servidoratravésdeumarede.

Qualquercoisaquesequeiraapresentarnateladeveserdesenhadadentrodeuma

janela.Umaaplicaçãopodeusarmuitasjanelasdecadavez. Menuseoutroselementos

da interface podem ser construídos com janelas que se sobrepõem às demais. As

janelassãoorganizadasemumahierarquia,oquefacilitaogerenciamento. Qualquer

janela,excetouma, chamadaderaiz,ésubjaneladeoutra.

Aoinvésde ummodelode objetos de altonível, X ofereceum substrato de

op-erações básicas, deixandoa abstraçãopara camadassuperiores. Um mecanismode

extensãopermiteàscomunidadesdeusuáriosestender osistemaemesclar essas

ex-tensõesharmoniosamente.

Suporte agrácos3D nãoera umdosrequisitos originaisdo sistema.

Posterior-menteoXConsortiumpadronizouumaextensãobaseadaemPHIGS(Programmer's

Hierarchical InteractiveGraphics System),chamadaPHIGSextensionfor X (PEX),

que não teve sucesso. A extensão GLX, desenvolvida pela Silicon Graphics (SGI)

paradarsuporteaopadrãoOpenGL(Seção3), acabousetornandoamaisaceita.

2.2Interfaces que constituemosistema de janelas

Umsistemadejanelaséconstituídoporváriasinterfaces:

Interface de programação. Bibliotecaderotinasetiposparainteraçãocomo

sis-temadejanelas. Hádoistiposdeinterfacedeprogramação. Ade baixo nível

provêfunçõesgrácasprimitivas. NoX,abibliotecaXlib[2]provêessasfunções

pormeiodetrocademensagenscomoservidor.Adealto nívelprovêfunções

para trataroselementos constituintes da interface. Existem diversas

bibliote-cas (toolkits) de interface. X não dene uma interface de alto nível padrão,

mas provê os mecanismosnecessários à construção de uma por meio de uma

bibliotecachamadaXToolkit(Xt)[11].

Interface de aplicação. Deneainteraçãomecânicaentreaaplicaçãoeousuário,

que é especíca da aplicação. X também não dene regras para interação

usuário/aplicação.

Interface de gerenciamento. Deneapolíticadecontroledoposicionamento,

taman-hoesobreposiçãodasjanelassobreaáreadetrabalho. Este papelcabeauma

aplicação chamada gerenciador de janelas (window manager). X não provê

umgerenciadorpadrão,masdene umconjunto deatributospara cadajanela

chamadowindow manager hints (dicas). Gerenciadoresde janelasdevem

faz-erusodessas dicaspara determinarasalteraçõesqueousuáriopode fazer na

(5)

Essaclassicaçãodeneumaarquiteturaemcamadasesugereindependênciaentre

mecanismo, provido pelas camadas abaixo da interface de programaçãode baixo

nível,inclusive,epolítica,providapelascamadasacimadesta.

Ainterface com o usuário éasoma das interfacesde aplicaçãoe de

gerenci-amento [18]. Baseado noprincípio deque oconceito demelhor interfaceécultural,

X foi projetado de forma a provermecanismos para que diferentes políticas de

in-terface pudessem ser implementadas, propiciando que as aplicações convivam com

diversasculturas. Afunçãodeprovertais interfacesédelegadaàsaplicaçõesclientes

ebibliotecasadicionais(Seção2.9).

2.3Conceitos importantes e terminologia

NoX WindowSystem, display éuma instância deum servidor X rodando em

uma máquina, ou seja, o conjunto de hardware de vídeo, teclado e mouse mais o

softwarequegerenciaessehardware. Umamáquinadedicada queserveapenascomo

display,échamadadeterminalX.Cadamonitorligadoàmáquinaédenominadotela

(screen). Umdisplay semprecontémpelo menosuma tela,masmúltiplos monitores

ligadosàmesmamáquinapodemconviverformandoumdisplay multiscreen.

Janela(window)podeter doissentidos,dependendodocontexto. Nonívelmais

baixo,éumaárea,normalmenteretangular,emumadastelasdodisplay, naqualos

clientes podem realizaroperações de entrada e saída (neste texto, o termo janela

seráusadocomestesignicado). Emumnívelmaisalto,janelaéaáreaocupadana

telaporuma aplicação,tambémchamadadejaneladeaplicação,oushell. Área de

trabalhoéoconjuntoformadopelajanela-raizdeumatelaeasjanelasdeaplicação

criadassobreela.

Servidor é o programa que compartilha um display com os clientes. O

servi-dor éconstruído em duascamadas, uma dependente dohardwaree outra

indepen-dente. Portaroservidorparaoutrohardwareimplicaemmodicarapenasaprimeira.

Cliente é uma aplicação que usa os serviços de um ou mais servidores de display,

podendotermaisdeumaconexãoabertasimultaneamentecomomesmoservidor.

Sessão(session)éoperíododetempoduranteoqualumusuáriotemacessoao

display. Normalmente apenas umusuáriopode usarodisplay decada vez, mas ele

podedarautorizaçãoaoutrosparaqueousem.

2.4Protocolo X

Acomunicaçãocliente-servidorsedáportrocademensagens,usandooprotocolo

X [19], que é independente do protocolo de transporte usado (TCP/IP, DECnet,

etc.). O protocolo provêrepresentação de dados independente da organização dos

computadores em que são executados o cliente e o servidor. Isto é negociado no

estabelecimento da conexão e o servidor trata de fazer no seu lado as conversões

(6)

As mensagens podem ser de três tipos: Request, para solicitaçãode serviços do

cliente ao servidor,Reply,para respostasarequisições;ou Event, paraeventos, tais

comoalteração dageometria deuma janela, pressionamento deuma teclaou

movi-mentaçãodomouse. Requests podemserdedoistipos,deacordocomomodocomo

o servidor notica o atendimento: unidirecionais (one way trip) ou de ida-e-volta

(roundtrip).

Requisiçõesunidirecionaisnãonecessitamesperarporuma conrmaçãoimediata

derecebimento, queseráenviadadecarona em umamensagemposteriordo

servi-dor. Isto melhora odesempenho do sistema, pois várias requisições podem ser

ar-mazenadasnobuer detransmissãoedescarregadasembloco,otimizando otráfego

na rede. Requisições de ida-e-volta precisamesperar arespostado servidor e, por

serembloqueantes,seuusodeveserevitadotantoquantopossível,paranãodegradar

odesempenhodosistema.

2.5Recursos do servidor

Recursos (resources) são os dados que residem na memória do servidor e são

compartilháveisentreclientesdeummesmodisplay,masnãoentredisplays diferentes.

Umrecursosobreviveenquantoduraraconexãodoservidorcomoclientequeocriou.

Janelas são áreas para desenho na tela, que podem conter outras janelas. A

destruiçãodeuma janelaimplica na destruiçãodetodasasque nelaestiverem

con-tidas,masajanela-raiz deumscreen nuncapodeserdestruída. Mapas de pixels

(pixmaps)sãoespécies dejanelasocultassobre asquaisocliente poderealizar

qual-queroperaçãodedesenhoqueseriafeitaemuma janela. Oconteúdode umpixmap

podesercopiadoparauma janelaevice-versa. Aplicaçõesquefazemdesenhos

com-plexos,comoanimaçõesouimagensdealtorealismo,podemaceleraraexibição

man-dandooservidorcopiarpartesdeumpixmap paraaáreaexpostadajanela,aoinvés

deredesenhá-la.

Contextos grácos(GCs graphic contexts)guardamconjuntos deatributos

grácoscomocoresdefrenteefundo,padrõesparadesenhodelinhas,preenchimento

depolígonos,fontesdecaracteres,etc. GCssãoglobaisparatodoumdisplay epodem

serusadosporqualquercliente emoperaçõessobrequalquerjanela.

Fontessãodescriçõesdaaparênciadeconjuntosdecaracteres,incluindoafamília,

inclinação, tamanho, espaçamento etipo de codicação, de acordocom osidiomas

aosquaiselessedestinam.

Mapas de cores(colormaps)são tabelas nasquaiscadacor éreferenciadapor

umíndice. O servidor provêum mapa global para serusado por todos osclientes,

masaplicaçõesquefazemusointensode corespodemcriarnovosmapasdecoresno

servidor,paraseuusoprivado.

Cursoresdescrevemaaparênciadocursorassociadoaodispositivoapontador. O

clientenãoprecisadesenharocursor,apenasrequisitaraoservidorqueuseumcerto

(7)

2.6Comunicação entre clientes

Xprovêmecanismosdecomunicaçãonãosóentreclienteeservidor,mastambém

entre clientes. A rigor, um cliente não pode realmente enviar eventos para outro

cliente, apenas para as janelas que este possui no servidor. Clientes que desejam

recebereventos enviados poroutrosdeverãofazer umarequisiçãoao servidor,quea

partirdeentãoosenviará. Umcliente nãoprecisasolicitareventospara umajanela

criada porele, maspodeinformar quenão osdeseja. As convençõespara interação

entre aplicações são descritas detalhadamente no Inter-Client Conventions Manual

(ICCCM)[17].

2.6.1Propriedades,átomos,áreas de recorte eseleções

Eventos permitem envio de mensagens, mas não são adequados ao

compartil-hamento dedadosentreclientes. Para fazeristo existem aspropriedades

(proper-ties),blocosdedadosqueumclientependura emumajanela. Propriedadespodem

ser criadas, destruídas, lidas e gravadas. Aplicações que compartilham dados via

propriedadesdevemsolicitaraoservidoranoticaçãodealteraçõesnasmesmas.

Átomos (atoms) sãoidenticadores únicosqueos clientes podem usarpara

co-municarinformaçãounsaosoutros. Umátomoésimplesmenteuma cadeiadebytes

detamanhoarbitrário. Aoinvésdeenviaressascadeiaspelaredeoclienteregistra-as

no servidor,obtendo umrótulo único. Átomos também sãousadospara especicar

tiposdedadosenomesdepropriedadeseseleções.

A janela-raizde cada tela possui umgrupode áreas de recorte(cut buers),

propriedadesidenticadaspelos átomospré-denidosXA_CUTBUFFER0a

XA_CUTBUF-FER7. AXlibpossuifunçõesparaarmazenarbytesnestasáreasderecorte,permitindo

àsaplicaçõesimplementar umsistema simplesderecortar-e-colar.

Seleções(selections)sãomecanismosmaissosticadosdoqueoscutbuers para

compartilhamentodedados[14,cap. 11]. Umaseleçãoétratadacomoumbastãoem

umsistema derevezamento. Apenas umclientepodedeter obastãodecadavez. O

detentordobastãodeveentãoatenderàsrequisiçõesdosoutrosclientes, convertendo

osdadosselecionadosparaumformatosolicitado,armazenandooresultadoemuma

propriedade e noticando o solicitante da disponibilidade. Seleções permitem que

clientes armazenemos dadosemseu próprioespaçode dadosenão na memóriado

servidorX.

2.7Arrastar e soltar

Arrastaresoltar,oudrag-and-drop(DnD),éatécnicainterativabaseadana

metá-foradeselecionarumobjetoemumajanelaetransportá-loparaoutra,resultandoem

umatransferênciadosdadosentreasduasaplicações. Xnãoprovêexplicitamentetal

(8)

CLIENTE

WM

1

2

3

4

Figura1: Criaçãodeumajanelatop-level. Oclientecriaajaneladentrodajanela-raiz

erequisita seu mapeamentonuma tela ao servidor X (1). Ogerenciador de janelas

recebeumanoticação(2),vericaaspropriedadescolocadasnajanelapeloclientee

criaumcontainercuja aparênciadependedoshints acopladosàjanela. Finalmente,

ogerenciador dejanelasrequisita oreparenting dajanela paradentro daborda(3).

Ousuáriosempreveráajaneladaaplicaçãodentrodocontainer(4).

usandoosmecanismosdisponíveis.

Emdecorrênciadisso,hámuitosprotocolosDnDparaX,dentreosquais

destacam-setrês. Otoolkit Motif[16] dene umprotocoloDnD baseadoem mensagens entre

clientes, propridadeseseleções. Como exemplodeaplicaçãoque usaesseprotocolo,

podemos citar o Netscape Navigator (versão para UNIX). O pacote de aplicativos

Ox[15], que posteriormente evoluiu para um toolkit grácocompleto, incluía um

protocoloDnD que foi usadopor um grande númerode aplicações. Xdnd [9] é um

protocolorecente,criadoparaotoolkit JX[10], masqueestásetornandopadrãode

fatoentreospacotesdesoftwarelivre.

Essespadrõessãoincompatíveisentresieafaltadeumpadrãorealé,

provavel-mente, o motivoprincipal da relativa escassez de aplicaçõespara X que suportem

DnD.Umacomparaçãoentreosdiversosprotocoloséfeitaem[9].

2.8Gerenciamento de janelas

O gerenciador de janelas é um cliente especial que implementa as políticas de

atribuiçãodofoco(ajanelaemfocorecebeoseventosdeteclado),

redimensionamen-toesobreposiçãodejanelas. Oprogramafazissocombasenasconvençõesdenidas

noICCCM,quedeneumconjunto padrãodepropriedadesacopladasacadajanela

quefuncionamcomodicas(hints)paraogerenciadordejanelas,contendoinformações

relativasàformacomoajaneladevesertratada. AFigura1mostracomoo

(9)

2.9Bibliotecas e toolkits

AsbibliotecasqueimplementaminterfacesdeprogramaçãoparaXsãochamadas

toolkits. OX Consortiumnuncaimpôsumtoolkit padrãopara interfacesgrácas,o

que resultou na grande proliferação desse tipo de software. Há dezenas de toolkits

diferentes, que vãode simples conjuntos de widgets (elementos da interfacegráca,

tais comobotões, caixasdetexto,etc.) usadosem uma únicaaplicaçãoaté pacotes

bastantesosticados. Abordaremosaquidoisdeles.

Xlib. Éa APIde mais baixo níveldisponívelpara X [2]. É um padrão

estabeleci-do pelo XConsortium, implementadocomo uma biblioteca emC, que oferece

funçõescomcorrespondênciaquasediretacomoprotocoloX.Todosostoolkits

conhecidos são implementados sobre Xlib, mas oferecem níveis mais altos de

abstração.

X Toolkit(Xt). Foicriadocomaintençãodeproverrecursosbásicosparao

desen-volvimentodeoutrostoolkits [11]. Xtnão temwidgets completos, masfornece

osmecanismosnecessáriosparasecriaruma bibliotecaqueospossua. Aidéia

é que Xt ofereça o suporte básico e que um toolkit complementar forneça os

widgets.

2.10Técnicas de programação

2.10.1Estrutura de um programa

Umprogramapara Xdivide-seemtrêspartes,emlinhasgerais:

Inicialização. Durante a inicialização, o programa fazo tratamento de opções de

linhadecomando,conexãocomoservidorX(sejaelalocalouremota)ealocação

deestruturasinternas.

Montagem dainterface gráca. Após aberta a conexão com o servidor, o

pro-grama pode criar emontar sua interfaceutilizando oswidgets oferecidos pelo

toolkit,oumanualmente,usandoasprimitivasdoXlib.

Laço de tratamento de eventos. Finalmente,oprogramaentraemumlaço,onde

ca esperando por eventos vindos do servidor e reagindo aeles. Em toolkits,

esteseventossãoprimeirotratadosinternamenteedependendodocaso(quando

omouseéclicadoemumwidgetbotão,porexemplo)sãorepassadosaoprograma

atravésdecallbacks oumecanismossimilares.

2.10.2Tratamento de eventos

Aousaraaplicação,ousuáriomoveomouse,clicaseusbotõesedigitanoteclado.

(10)

origensde eventos sãoamodicaçãodahierarquia dejanelas, obscurecimento e

ex-posiçãodeumajanelaoudepartesdela. UmclienteXconsisteentãodeumprograma

queenviarequisiçõesaoservidorereageaeventos.

Nemtodososeventospodemserinteressantesparaocliente. Pode-seinformarao

servidorquetiposdeeventosdevemserreportadosparacadaumdosobjetoscriados

pelo cliente, o que ajuda a reduzir otráfego de mensagens desnecessárias, além de

simplicarocódigodaaplicaçãoeconsumirmenosprocessamento.

Uma conseqüênciaindesejável dosistema de eventos éque, mesmo selecionando

ostiposquesequerreceber,muitosdelesaindapodemserdesnecessários. Amaneira

corretadetrataresseproblemaédescartartodososeventosdeumacadeiadeeventos

domesmotipoereagirapenasaoúltimo[5]. Otrechodeprogramaaseguirdemonstra

essatécnica,exemplicando ouso defunçõesexistentes naXlibpara vericar sehá

eventos na la (XEventsQueued), consultar o próximo evento sem retirá-lo da la

(XPeekEvent)eretirar um evento da la (XNextEvent). A vericaçãotem que ser

feitaantesdetentarleroeventoporqueachamadaXNextEventébloqueante.

/* laço de tratamento de eventos */

done = 0;

while(!done) {

/* lê o próximo evento */

XNextEvent(mydisplay, &myev);

switch(myev.type) {

/* redesenha a janela em eventos Expose */

case Expose:

/* Comprime uma seqüência de Exposes, para evitar repetidas

repinturas, já que para um redimensionamento da janela o

servidor X envia vários Exposes consecutivos. */

while(

(XEventsQueued(myev.xexpo se. disp lay, Que uedA fter Rea ding ) > 0)

&& (XPeekEvent(myev.xexpose. disp lay, &nextev),

(nextev.type == Expose))

) {

XNextEvent(mydisplay, &myev);

}

desenhar(mydisplay, mywindow, mygc);

break;

2.10.3Primitivas de desenho

Xpossuiumasériedemecanismosparaageraçãodeformasgeométricassimples.

PontosindividuaissãodesenhadosusandoafunçãoXDrawPoint:

XDrawPoint(display, d, gc, x, y)

Display *display;

Drawable d;

GC gc;

(11)

Nocódigoacima,DrawablepodeserumajanelaouumpixmapeGCéumcontexto

grácoquedeterminaosatributosusadosparadesenho. Múltiplospontospodemser

desenhadosdeumasóvez comafunçãoXDrawPoints.

Àsemelhançadospontos,linhassãodesenhadascomafunçãoXDrawLinee

múlti-plaslinhaspodemserdesenhadasdeumaúnicavezusandoafunçãoXDrawLines.

XDrawArc e XDrawArcsdesenham um ou diversos arcos(círculos e elipses). Ao

usaressasfunções,éimportante observarquenoXosângulossãosempre expressos

em 1

64

de grau. Istopodeparecerestranho,mastem avantagemdepermitirquese

usemvaloresinteirosparaosângulos.

XDrawRectangleeXDrawRectanglesdesenhamumoudiversosretângulosdecada

vez. Os retângulosnão podem serrotacionadosem relação aoseixos x ey da tela.

Caso sejanecessário fazer isto,será preciso calcularascoordenadasde cada vértice

do retângulo edesenhá-lo usando XDrawLines. Retângulos são osúnicos polígonos

suportadosdiretamente. Casosequeiradesenharoutrostipos,seránecessáriocalcular

ascoordenadasdosvérticesedesenhá-losusandoXDrawLines.

Paraopreenchimentodeáreas,asfunçõesXFillArc,XFillArcs,XFillPolygon,

XFillRectangleeXFillRectanglespermitemdesenharasmesmasformas

geométri-casmencionadasanteriormente,maspreenchidascomuma coroupadrãodepontos.

2.11Usando XWindow System

Graçasàsualosoadeoferecermecanismoenãopolítica,associadaà

extensibil-idadedoprotocolo,Xtemevoluídoaolongodesuaexistência,sempreseconservando

como uma plataforma de desenvolvimento estável, conável e versátil para a

con-struçãode aplicaçõesgrácasinterativas. A existência deuma especicaçãoformal

rígidaparaoprotocologarantetambémainteroperabilidadeemambientes

heterogê-neos dehardware/software.

Porserbaseadoemumprotocolodecomunicaçõeseteruma arquitetura

cliente-servidor,quegaranteindependênciaentreaplicação ehardwaregráco,X provê

su-porte transparente à operaçãoem ambiente distribuído. A maioriados sistemas de

janelasoperaem modokernel,oqueobrigaaaplicaçãoaserexecutadanamesma

máquina em que está o display. Além disso, X tem escalabilidade: uma máquina

poderosa pode servir simultaneamente a dezenas de usuários conectados a ela por

terminaisXremotos.

As noções sobre programação apresentadas nas seções anteriores representam

muito pouco daquilo que se pode fazer com X, principalmente quando combinado

combibliotecasdeinterfaceeferramentasdemaisaltonível,comoOpenGLqueserá

visto na próxima seção. Para obter informações mais profundas, a documentação

de referência se encontra na forma de páginas de manual, normalmente instaladas

emsistemascomoX.ManuaisdereferênciaemPostScript(r)podemserobtidosvia

FTPanônimoemftp://ftp.x.org/pub/R6.4/xc/docs/hardcopy/.Referências

(12)

LessTif: http://www.lesstif.org/edaMotifZone http://www.motifzone.net/.

3 OpenGL

Padrõesgrácos,comoGKS(GraphicsKernelSystem)ePHIGS,tiveram

impor-tante papelna décadade 80, inclusive ajudando aestabelecer oconceito de usode

padrõesmesmoforadaáreagráca,tendosidoimplementadosem diversas

platafor-mas. NenhumadestasAPIs,noentanto,conseguiutergrande aceitação[20].

Atualmente,oOpenGL(GL signicaGraphics Library) éuma API degrande

utilizaçãonodesenvolvimentodeaplicaçõesemComputaçãoGráca[13]. Estepadrão

éosucessordabibliotecagrácaconhecidacomoIRISGL,desenvolvidapelaSilicon

Graphics como uma interface grácaindependente dehardware [6]. A maioria das

funcionalidadesdaIRISGLfoiremovidaourescritanoOpenGLeasrotinaseos

sím-bolos foram renomeadospara evitar conitos (todos osnomes começamcom gl ou

GL_). Namesmaépoca foiformadooOpenGLArchitecture ReviewBoard,um

con-sórcioindependentequeadministraousodoOpenGL,formadopordiversasempresas

daárea.

OpenGLéumainterfacequedisponibilizaumcontrolesimplesedireto sobreum

conjuntoderotinas,permitindoaoprogramadorespecicarosobjetoseasoperações

necessáriaspara aprodução deimagensgrácasde altaqualidade. OpenGL éuma

máquina de estados, onde o controle de vários atributos é realizado atravésde um

conjunto de variáveisde estado que inicialmente possuem valores default, podendo

seralteradoscasosejanecessário. Assim,porexemplo,todoobjetoserátraçadocom

amesmacoratéquesejadenido umnovovalorparaestavariável.

Porserumpadrãodestinadosomenteàrenderização[21],OpenGLpodeser

uti-lizadoemqualquersistemadejanelas(porexemplo,XouWindows),aproveitando-se

dosrecursosdisponibilizadospelosdiversoshardwaresgrácosexistentes. NoX

Win-dowSystemeleéintegradoatravésdoGLX(OpenGLExtensionforX),umconjunto

derotinaspara criare gerenciarumcontextode renderizaçãodoOpenGL noX[6],

[21]. AlémdoGLX, existemoutrasbibliotecasalternativasparainterfaceamento no

X, taiscomo GLUT (OpenGL Utility Toolkit)[7] eGTK[3]. Estas bibliotecas

pos-suemumconjuntodeferramentasquefacilita aconstruçãodeprogramasutilizando

oOpenGL.

3.1Objetos geométricos

OpenGLéumainterfacequenãopossuirotinasdealtoníveldeabstração. Desta

forma,asprimitivasgeométricassãoconstruídasapartirdeseusvértices. Umvérticeé

representadoemcoordenadashomogêneas(x,y,z,w). Sewfordiferentedezero,estas

coordenadas correspondem a um ponto tridimensional euclidiano (x/w, y/w, z/w).

(13)

1

GL_QUAD_STRIP

GL_TRIANGLES

0

1

2

3

4

5

6

7

0

2

4

8

5

3

1

6

7

GL_TRIANGLE_STRIP

GL_TRIANGLE_FAN

0

2

1

3

4

5

0

1

2

3

4

5

GL_LINE_LOOP

0

1

2

3

4

5

GL_POLYGON

GL_QUADS

0

1

2

3

4

0

1

2

3

4

5

6

7

GL_POINTS

GL_LINES

GL_LINE_STRIP

0

2

3

4

5

0

1

2

3

4

0

1

2

3

4

5

6

Figura2: PrimitivasgeométricasdoOpenGL[6].

tridimensional. Assim sendo, os pontos bidimensionais especicados pelo usuário

são trabalhados como pontos tridimensionais, onde a coordenada z é igual a zero.

Ossegmentosderetasãorepresentadospor seuspontosextremoseospolígonossão

áreasdenidasporumconjuntodesegmentos. NoOpenGL,algunscuidadosquantoà

deniçãodeumpolígonodevemsertomados: umpolígonodeverásersempreconvexo

e não poderá ter interseçãodassuas arestas (conhecidocomo polígonosimples). A

especicaçãodeumvérticeéfeitaatravésdasfunçõesglVertex*(O *seráutilizado

nestetextopararepresentarvariantes nonomedafunção;asvariaçõesrestringem-se

ao número e/ou ao tipo dos argumentos  por exemplo, glVertex3i denirá um

vérticecomtrêscoordenadasinteiras).

Emmuitasaplicaçõesgrácas háanecessidadededenirpolígonosnãosimples,

côncavosoucomfuros. Comoqualquerpolígonopodeserformadoapartirdaunião

de polígonos convexos, algumas rotinas mais complexas, derivadas das primitivas

básicas,sãofornecidasnaGLU(OpenGLUtilityLibrary)[13]. Estabibliotecautiliza

somente funçõespadrõesdoOpenGLeestá disponívelem todasasimplementações

doOpenGL.

Para traçar um conjunto de pontos, um segmento ou um polígono, os vértices

necessários para adenição destas primitivassão agrupadosentre aschamadasdas

funçõesglBegineglEnd. Pode-seadicionartambéminformaçõesaumvértice,como

umacor,umvetornormalouumacoordenadaparaatextura. Oargumentodafunção

glBegin indicaráaordem como serãoassociados osvértices, conformeilustradona

Figura2.

No OpenGL, uma primitiva pode ser traçada de diferentes maneiras, conforme

a ordemselecionada e oconjunto devértices denido. Otrechode códigoa seguir

apresentaumexemplodotraçadodeumacircunferência.

#define PI 3.1415926535

int circle_points = 100;

glBegin(GL_LINE_LOOP);

for (i = 0; i < circle_points; i++) {

(14)

glVertex2f(cos(angle), sin(angle));

}

glEnd();

O exemplo acima não é o modo mais eciente para traçar uma circunferência,

especialmente seestaprimitivafor utilizadaváriasvezes. Nestecaso,odesempenho

carácomprometidoporqueháocálculodoânguloeaexecuçãodasfunçõessinecos

para cadavértice, alémdo overhead do loop. Poderíamossolucionar este problema

calculando as coordenadas dos vértices uma única vez e armazenando-os em uma

tabela, ou utilizando uma rotina GLU/GLUT, ou ainda criando uma display list,

queéumamaneiradedenirumgrupoderotinasdoOpenGLqueserãoexecutadas

posteriormente,respeitandoaseqüênciaemqueforamdenidas.

3.2Visualização

Em Computação Gráca, organizar as operações necessárias para converter

ob-jetos denidos emum espaçotridimensional paraum espaçobidimensional(tela do

computador) é uma das principais diculdades no desenvolvimento de aplicações.

Paraisso,aspectoscomotransformações,clipping edeniçãodasdimensõesde

view-port (porçãodajanelaondeaimagemédesenhada)devemserconsiderados.

Transformaçõessão operaçõesdescritaspela multiplicaçãode matrizes. Estas

matrizespodem descreveruma modelagem, uma visualizaçãoou uma projeção,

de-pendendo do contexto. Clipping é aeliminação de objetos (ou partes de objetos)

queestãosituadosforadovolumedevisualização. Oenquadramentodasimagensno

viewport éaoperaçãodecorrespondência entre ascoordenadastransformadaseos

pixelsdatela.

Asmatrizesdemodelagemposicionameorientamosobjetosnacena,asmatrizes

de visualizaçãodeterminam oposicionamento dacâmera e asmatrizes de projeção

determinamovolumedevisualização(análogoàescolhadalenteparaumamáquina

fotográca). NoOpenGL,as operaçõescomestasmatrizessãorealizadasatravésde

duaspilhas: apilha quemanipulaasmatrizesdemodelagemedevisualização

(mod-elview)eapilhaquemanipulaasmatrizesdeprojeção(projection). Asoperaçõesde

modelagemedevisualizaçãosãotrabalhadasnamesmapilha,poispode-seposicionar

acâmeraemrelaçãoàcenaouvice-versa,ondeoresultadodeambasoperaçõesserá

omesmo. A denição dapilha na qualsedesejatrabalhar éfeitaatravésdarotina

glMatrixMode,indicadapelo argumentoGL_MODELVIEWouGL_PROJECTION.

Para o posicionamento da câmera ou de um objeto são utilizadas as rotinas

glRotate*e/ouglTranslate*, quedenemrespectivamente matrizes de rotaçãoe

detranslação. Pordefault,acâmeraeosobjetosnacenasãooriginalmentesituados

naorigem. HátambémarotinaglScale*,quedeneumamatrizdeescalonamento.

Quantoàdeniçãodaprojeção,OpenGLprovêduastransformações:aperspectiva

(15)

afastado dacâmera. Naortogonal, aprojeção não éafetada pela sua distância em

relaçãoàcâmera.

Paraestabeleceraáreanatelaondeaimagemserárenderizadaéutilizadaarotina

glViewport. Esta rotinapoderá distorceraimagem,casoarelaçãoentreaalturae

alarguradajanelanatelanãocorresponderamesmarelaçãoutilizadaparadenira

janelanovolumedevisualização.

3.3Cor

OpenGLpossuidois modosdiferentes para tratarcor: omodoRGBA eomodo

indexadode cor[6]. OmodoRGBA possui ascomponentes vermelho,verde,azule

alfa,respectivamente. Ostrêsprimeirosrepresentamascoresprimáriasesãolineares

(variandode0.0a1.0). Acomponentealfaéutilizada,porexemplo,emoperaçõesde

blending (mistura)etransparência. Estacomponenterepresentaaopacidadedacor,

variandode0.0(totalmentetransparente)até1.0(totalmente opaca).

Omodoindexadodecorutilizaummapadecores. Estemapaarmazenaemcada

índice os valorespara cada componente primária (RGB). A corentão étrabalhada

pelo índice, enão porsuascomponentes. OpenGLnão tem rotinasespecícaspara

alocaçãodecores,sendoosistemadejanelasresponsávelporestafunção.

3.4Aparência dos Objetos

OpenGL utiliza o modelo de Gouraud para a tonalização, provendo uma cena

comrealismo. Uma cena érenderizadalevando-se em consideraçãoalgunsaspectos

como, porexemplo, o tipode fonte de iluminação que está sendousada na cena e

aspropriedadesdo material para cadasuperfície. Alguns efeitos complexos comoa

reexãodaluzesombranãosãodiretamentesuportados,emboraestejamdisponíveis

códigos-fontenaredeparasimulartais efeitos.

Paraimplementaromodelodeiluminação,OpenGLdecompõeoraioluminosonas

componentesprimáriasRGBparacadacomponentedeluzdomodelodeiluminação,

quesão:

Componenteambiente. Componenteprovenientedeumafontequenãoépossível

determinar. Porexemplo,aluzdispersa em umasalatemumagrande

quan-tidadedacomponenteambiente,poisestaluzéresultantedemultireexõesnas

superfíciescontidasnacena.

Componentedifusa. Componentereetidaemtodasasdireçõesquandoestaincide

sobre uma superfície,provenientede uma direçãoespecíca. A intensidadede

luz reetida será amesma para oobservador, não importandoonde ele esteja

situado(superfícieLambertiana).

Componenteespecular. Componentereetidaemumadeterminadadireção

(16)

Su-perfícies como metais brilhantes produzem grande quantidade de reexão

es-pecular. OmodelodePhongéutilizadoparaocálculodareexãoespecular.

Quanto aostipos defonte deiluminação,OpenGL possuifontes pontuais,que

irradiam energia luminosa em todas as direções e spots, que são fontes pontuais

direcionais,i.e., têmumadireçãoprincipalnaqualocorreamáximaconcentraçãode

energialuminosa;foradestadireçãoocorreumaatenuaçãodestaenergia.

Damesmamaneiraquealuz,diferentesmateriaisdesuperfíciespodemapresentar

comportamentosdistintosemrelaçãoàscomponentesespecular,difusaeambientede

umaoumaisfontesluminosas,determinandoassimacordasuperfície. Umareexão

dacomponenteambientedomaterialécombinadacomacomponenteambientedaluz,

damesmaformaareexãodacomponentedifusadomaterialcomacomponentedifusa

daluzesimilarmenteparaareexãoespecular. Asreexõesdifusaeambientedenem

acor domaterial, enquanto areexãoespeculargeralmente produzuma corbranca

oucinza. AsrotinasglMaterial*sãoutilizadasparadeterminaraspropriedadesdos

materiais.

OpenGL também provê suporte para o mapeamento de texturas, embora esse

aindaseja um recurso bastante limitado, pois não existem facilidades para mapear

imagens de outras fontes (é necessário um programa auxiliar para converter uma

imagememuma representaçãoaceitapeloOpenGL).

3.5Framebuer

Umconjuntode buers de umadeterminadajanela oude umdeterminado

con-textoédenominadoframebuer. NoOpenGL,háumconjuntodebuersquepodem

sermanipuladosconformeanecessidade[13]:

Buers de cor. Sãonormalmente utilizadospara traçaraimagem. Podem conter

cores indexadas ou RGBA. Dependendo da aplicação, pode-se trabalhar com

imagensestéreooudoublebuering (doisbuers deimagem,umvisívele

out-ro não), desde que o sistema de janelas e o hardware suportem. Como no

OpenGLnãohárotinasespecícasparaproduçãodeanimações,autilizaçãode

umdouble buer éuma opção. NoX, por exemplo,há umcomando

denomi-nadoglXSwapBuffers,que disponibiliza este recurso. Dessa forma, enquanto

umquadroéexibidonatela,opróximoquadroestásendorenderizadonobuer

nãovisível.

Buer de profundidade. É utilizado para armazenar, durante a renderização, o

pixel cuja profundidade (coordenada z) é dada pela função de comparação

glDepthFunc. Por exemplo,para realizaro algoritmoz-buer, afunção pode

escolheropixeldemenorcoordenadazdentreosquetiveremasmesmas

(17)

Buer Stencil (seleção). Serveparaeliminaroumantercertospixelsnatela,

de-pendendo dealgunstestesdisponibilizadosparaeste buer. Émuitoutilizado

em simuladoresondeénecessáriomantercertasáreasealteraroutras.

Buer de acumulação. Contém cores especicadas em RGBA. É utilizado para

acumularumconjuntodeimagensatravésdeumaoperaçãopré-especicada. A

imagem resultante destas acumulaçõeséexibidaatravésda transferênciapara

umbuer decor. Podeserutilizadoparatrabalharcomdiversastécnicascomo,

porexemplo,antialiasing, motionblur (borrão)ouprofundidadedecampo.

3.6Usando OpenGL

A página do consórcio que administra o OpenGL é http://www.opengl.org,e

a página da SGI é http://www.sgi.com/software/opengl. Informações de

âm-bito geral e bibliotecas relacionadas podem ser obtidas em http://reality.sgi.

com/opengl/. Existetambémumclonenão-proprietáriodoOpenGLchamadoMesa

(http://www.mesa3d.org).

OpenGL foi projetado para fornecer o máximo acesso às capacidades de

difer-enteshardwaresgrácos,sendoimplementáveleexecutávelemumavariedadede

sis-temas. OMicrosoftDirectXSDK (http://www.microsoft.com/directx/)

disponi-biliza,atravésdasAPIsDirectDraweDirect3D,recursossemelhantesaosencontrados

no OpenGL, mas este é um sistema comercial, disponívelapenas para o Windows.

Além disso,segundo[8],Direct3DéumaAPImuitocomplexaedifícildeutilizar.

Pelasuaexibilidadeemmodelarerenderizarobjetosgeométricos,OpenGLserve

como umaexcelente basepara construirbibliotecasparadeterminados contextosde

aplicação,comoJava3Dqueserávistanapróximaseção.

4 Java 3D

Java3Déumainterfacecriadaparaodesenvolvimentodeaplicaçõesgrácas

trim-idensionaisemJava,executadanotopodebibliotecasgrácasdemaisbaixonível,tais

comoOpenGLeDirect3D,conformeilustraaFigura3. Comisto,osprogramadores

de aplicaçõespassam aexplorar, agora no âmbitodas aplicaçõesgrácas

tridimen-sionais, o conjunto de facilidades evantagensda plataforma Java, como orientação

a objetos, segurança e independência de plataforma. Em particular, a orientação

a objetos oferece uma abordagem de alto nível à programaçãoe possibilita que o

desenvolvedor sededique mais àcriação do que aos problemas de mais baixo nível

pertinentes àprogramação 3D, osquais exigem um esforçoconsiderável. Esta

tec-nologiagrácavem aindaaoencontro deuma crescente demandaporoperações3D

requisitadahojepela Web.

Java3D utilizaalgunsconceitos quesão comunsaoutras tecnologias,tais como

(18)

Java 3D

Hardware

Direct3D

Native Graphics Calls

Java

Applets ou Aplicações

Futuras APIs

OpenGL

Figura3: RelaçãoentreasváriascamadasdesoftwarenocontextodeJava3D.

próxima[1]. UmaaplicaçãoJava3Déprojetadaapartirdeumgrafodecenacontendo

objetos grácos, luz, som, objetos de interação, entre outros, que possibilitam ao

programadorcriarmundosvirtuaiscompersonagensqueinteragementresie/oucom

ousuário [22]. Descrever uma cena usando um grafo é tarefa mais simples doque

construiramesmausandolinhasdecomandoqueespecicamprimitivasgrácas,tais

comoasdoOpenGL.

4.1Ografo de cena emJava 3D

O primeiro procedimento na elaboração de uma aplicação Java 3D é denir o

universo virtual, que é composto por um oumais grafos de cena. Ografo de cena

éuma estrutura do tipo árvore cujos nóssão objetos instanciados dasclasses Java

3Deosarcosrepresentamotipode relaçãoestabelecida entre doisnós. Osobjetos

denemageometria,luz,aparência,orientação,localização,entreoutrosaspectosda

cena. A Figura4ilustraumpossívelexemplodegrafodecenas.

Osgrafosdecenas sãoconectadosao universovirtual(representadonaFigura 4

atravésdonóVirtualUniverse)pormeiodeumnóLocale.UmnóVirtualUniverse

pode ter um ou maisnós Locale,cuja nalidade é fornecer um sistema de

coorde-nadasaomundovirtual. Onó-raizdeumgrafodecena(branchgraph)ésempreum

objeto BranchGroup.

Osbranchgraphssãoclassicadosemduascategorias: deconteúdo(contentbranch

graph) e devista (view branch graph). Os content branch graphs descrevem os

ob-jetos queserãorenderizados, i.e., especicam ageometria, textura, som, objetos de

interação, luz, como estes objetos serão localizados no espaço, etc. (na Figura 4 é

oramo àesquerda donóLocale). Osview branch graphs especicamasatividades

eparâmetros relacionados como controle da vista dacena, tais como orientação e

localizaçãodousuário(naguraéoramoàdireita donóLocale).

Umcaminhoentreonó-raizdografodecenasatéumdeseusnósfolhasdetermina

deformaúnicatodasasinformaçõesnecessáriasparaseprocessarestenó. Omodelo

(19)

TG

Appearence

Geometry

Node Components

View Platform

View

Canvas3D

Screen3D

Physical Body

Physical Environment

TransformGroup Node

BranchGroup Node

Locale

Virtual Universe

Node

Shape3D

BG

BG

Figura4: Grafodeuma cenaemJava3D.

queele determinaseramaiseciente. Emgeraloprogramadornão sepreocupaem

determinarumaordemderenderização,umavezqueJava3Dfaráistodaformamais

eciente. No entanto, um programador poderá exercer, de forma limitada, algum

controleusandoumnóOrderedGroup,queasseguraqueseuslhosserãorenderizados

emumaordempré-denida,ouumnóSwitch,queselecionaumoumaislhosaserem

renderizados.

Java3D organizaouniversovirtualusando oconceito deagrupamento, i.e., um

nómantémumacombinaçãodeoutrosnósdemodoaformarumcomponenteúnico.

EstesnóssãodenominadosGroup. UmnóGrouppodeterumaquantidadearbitrária

de lhos que são inseridos ou removidos dependendo do que se pretende realizar.

Discutimos anteriormenteos nósBranchGroup,OrderedGroupeSwitch. Inserem-se

aindanestacategoriaosnósTransformGroup,quesãousadosparaalterara

localiza-ção,orientaçãoe/ouescaladogrupodenósdescendentes.

Umnó quenão possui lhos pertence auma segundacategoria e édenominado

nóLeaf. Estesnóssãousadosparaespecicarluz,som,procedimentosdeinteração,

formadosobjetosgeométricos,orientaçãoelocalizaçãodoobservadornomundo

vir-tual,entreoutros. EstasinformaçõesestãoarmazenadasnopróprionóLeafouentão

éfeitaumareferênciaaumobjeto NodeComponentquemantémosdadosnecessários

paraoprocessoderenderização. OsobjetosNodeComponentnãofazempartedografo

de cenas, i.e., arelação entre um nó Leafe um NodeComponentnão édo tipo

(20)

mesmoNodeComponentsemviolaraspropriedadesdografodecenas,queéumgrafo

direcionadoacíclico.

ComoexemplosdenósLeafpodemsercitados: Light,Sound,Behavior,

Shape-3D e ViewPlatform. Nós Shape3D são usados para construir formas 3D a partir

deinformaçõesgeométricaseatributos queestãoarmazenadosem umobjeto

Node-Component (naFigura 4, são os elementos referenciados por arcos tracejados). Os

nós Behavior são usados na manipulação de eventos disparados pelo usuário e na

animaçãodeobjetosdouniversovirtual. UmnóViewPlatforméusadoparadenir

a localização e orientação do observador (ou do usuário) no mundo virtual. Um

programa Java 3D pode fazer o observador navegar pelo mundo virtual aplicando

transformaçõesdetranslações,rotaçõeseescalonamentosnestenó.

4.1.1Escrevendo umprograma emJava 3D

A estrutura típicade umprogramaJava3D em geraltem doisramos: umview

branch eumcontent branch. Assim, escreverum programaem Java3D requer

ba-sicamentecriarosobjetosnecessáriosparaconstruirosramosview branch econtent

branch. Umbompontodepartidaéaseqüênciadepassossugeridapor[23]:

1. Criarumobjeto Canvas3D

2. Criarumobjeto VirtualUniverse

3. Criarumobjeto Localeeanexá-loaoVirtualUniverse

4. Construirumgrafoviewbranch

(a) Criarumobjeto View

(b) Criarumobjeto ViewPlatform

(c) Criarumobjeto PhysicalBody

(d) Criarumobjeto PhysicalEnvironment

(e) Anexarosobjetoscriadosem(b),(c) e(d)aoobjetoView

5. Construirumoumaisgrafoscontentbranch

6. Compilaro(s) branch graph(s)

7. InserirossubgrafosaonóLocale

A construção do grafo view branch (item 4 acima) mantém a mesma estrutura

paraamaioria dosprogramasJava3D.Uma formade ganhartempo éusaraclasse

SimpleUniverse,queretornaumuniversovirtualcomosnósVirtualUniverse(item

2acima),Locale(item3), ViewPlatformeosobjetosrelativosaoitem4.

Aseguiréapresentadoocódigodeumaaplicaçãoquecriaumgrafodecenasque

(21)

public class Exemplo01 extends Applet {

public Exemplo01 () {

setLayout(new BorderLayout());

Canvas3D canvas3D = new Canvas3D(null); // passo 1

add("Center", canvas3D);

BranchGroup s = ConstroiContentBranch() ; // passo 5

s.compile(); // passo 6

// A instanciação de um objeto SimpleUniverse corresponde

// aos passos 2, 3, e 4 da "receita"

SimpleUniverse su = new SimpleUniverse(canvas3D);

// Desloca o ViewPlatform para trás para que os

// objetos da cena possam ser vistos.

su.getViewingPlatform(). setN omi nalV iewi ngT rans form ();

// Anexa o content graph ao nó Locale : passo 7

su.addBranchGraph(s);

}

public BranchGroup ConstroiContentBranch() {

// Especificação dos conteúdos gráficos a serem renderizados

BranchGroup objRoot = new BranchGroup();

// Especificação das 2 rotações do cubo: uma no eixo x

// e outra no eixo y. Depois as duas são combinadas.

Transform3D rotate1 = new Transform3D();

Transform3D rotate2 = new Transform3D();

rotate1.rotX(Math.PI/4.0 d);

rotate2.rotY(Math.PI/5.0 d);

rotate1.mul(rotate2);

TransformGroup objRotate = new TransformGroup(rotate1);

objRoot.addChild(objRota te);

objRotate.addChild(new ColorCube(0.4));

return objRoot;

}

}

4.1.2Congurando as capacidades de umobjeto Java 3D

O grafo de cenas Java 3D pode ser convertido para uma representação interna

que tornaoprocesso derenderizaçãomais eciente. Esta conversãopode ser

efetu-ada anexandocada branch graph a um nó Locale,tornando-osvivos(live) e,

con-seqüentemente, cada objeto dobranch graph é dito estarvivo. A segunda maneira

é compilando cada branch graph, usando o método compile, de forma a torná-los

objetoscompilados. Uma conseqüênciadeumobjetoservivoe/oucompiladoéque

seus parâmetros não podem ser alterados a menos que tais alterações tenham sido

(22)

quepodemseracessadosédenomominadacapabilities evariadeobjetoparaobjeto.

Oexemploaseguircria umnóTransformGroupecongura-oparaescrita. Isto

sig-nicaque ovalor datransformada associadaao objeto TransformGrouppoderá ser

alteradamesmodepoisdeletornar-sevivoe/oucompilado.

TransformGroup alvo = new TransformGroup();

alvo.setCapability(Transf ormG rou p.AL LOW _TRA NSFO RM_ WRIT E);

4.2Modelagem

Umobjeto3DéumainstânciadaclasseShape3D,representadonografodecenas

por um nó do tipo Leaf. O nó Shape3D não contém os atributos que denem o

objeto 3D,tais comoseuconteúdogeométricoesuaaparência. Estesatributosestão

armazenadosem objetos dotipoNodeComponent.

Uma alternativa é denir um objeto 3D como sendo uma extensão da classe

Shape3D,o que é bastante útil quando se deseja criar múltiplas instâncias do

ob-jeto3Dcomosmesmosatributos.

4.2.1Denindoa geometriade um objeto 3D

Para que um objeto 3D seja funcional é necessário especicar pelo menos seu

conteúdo geométrico. Java 3D oferece basicamente três maneiras de se criar um

conteúdo geométrico. O primeiro método é o mais simples e consiste no emprego

deprimitivasgeométricas,taiscomoBox,Sphere,Cylinder eCone,cujacomposição

determinaaformadoobjeto desejado. Cadaprimitivapossuiummétodoconstrutor

ondesãoespecicadasasdimensõesdo objeto (ou então estessãoinstanciados com

dimensõesdefault). Emrazãodalimitaçãoinerenteaestemétodocomo,porexemplo,

aimpossibilidadedealteraçãodageometriadasprimitivas,elenãoéomaisapropriado

paramodelarageometriadeumobjeto3Dmaiscomplexo.

Umsegundométodopermiteque osdadosgeométricosquemodelamaformado

objeto 3D (primitivas geométricas denidas pelo programador) sejam especicados

vértice a vértice em uma estrutura vetorial. Esta estrutura é denida usando as

subclassesdeGeometryArraycomopor exemplo: PointArraydeneumvetorde

vértices,LineArray dene umvetor desegmentos, TriangleArraydene um

vetordetriângulosindividuaiseQuadArraydeneumvetordevérticesondecada

quatrovérticescorrespondemaumquadrado individual. Estes polígonosdevem ser

convexoseplanares.

UmobjetoGeometryArraypodearmazenar,alémdascoordenadasdelocalização,

coordenadasdovetornormalàsuperfície,coordenadasde coresede texturas. Uma

alternativa ao GeometryArray, eliminando possíveis redundâncias, é usar a classe

(23)

umobjeto IndexedGeometryArrayprecisa, alémdovetorde dados,deumvetorde

índicesparafazerreferênciasaoselementos dovetordedados.

Asalternativasapresentadasno segundométodooferecem aoprogramadormais

exibilidade na denição da forma dos objetos, mas ainda pesam contra elas

algu-mas desvantagens. A criação deum conteúdo geométricomais elaboradovai exigir

grandequantidadedetempoedelinhasdecódigopara computarmatematicamente

ouespecicaralistadevérticesdoobjetodeinteresse. Estabaixa performance não

motivaráoprogramadoradesenvolverformasmaissosticadas.

Aindacomrelaçãoaestaabordagemdedeniraformadoobjeto3Dusandoforça

bruta, Java3D disponibilizaumpacote com.sun.j3d.utils.geometryque oferece

algumas facilidades neste processo. Porexemplo, ao invésde especicar

exaustiva-mente as coordenadas, triângulo atriângulo, especica-seum polígono arbitrárioP

(quepodesernão-planarecomburacos)usandoumobjetoGeometryInfo,easeguir

efetua-se atriangulação de P usando um objeto Triangulator. A triangulação de

um polígononão-planar, noentanto, pode gerardiferentes superfícies,demodoque

oresultadoobtidopodenão serodesejado.

Java3D também ofereceum terceiro método, baseado na importaçãode dados

geométricoscriadosporoutrasaplicações,queresolveemgrandeparteosproblemas

citadosanteriormente. Nestetipodeabordagemécomumusarumsoftwareespecíco

para modelagem geométrica que ofereça facilidades para criar o modelo desejado.

Feito isto, o conteúdo geométrico é então armazenado em um arquivo de formato

padrão que posteriormente será importadopara umprogramaJava 3D, processado

e adicionado a um grafo de cenas. O trabalho de importação destes dados para

um programaJava3D érealizadopelos loaders [23]. Um loader sabe como lerum

formato de arquivo 3D padrão e então construir uma cena Java 3D a partir dele.

ExisteumagrandevariedadedeformatosdisponíveisnaWeb,porexemplooformato

VRML(.wrl),Wavefront(.obj),AutoCAD(.dfx),3DStudio(.3ds),LightWave(.lws),

entre outros. Uma cena Java3D pode ainda ser construída combinando diferentes

formatosdearquivo. Paraissoésuciente usaros loaders correspondentes. Porm,

vale observarqueestesloaders não fazemparteda Java3D, sãoimplementaçõesda

interfacedenidanopacotecom.sun.j3d.loaders.

4.2.2Denindoa aparência de umobjeto 3D

Um nó Shape3D pode, opcionalmente, referenciar um objeto Appearance para

especicarsuaspropriedades,taiscomotextura,transparência,tipodematerial,estilo

de linha, entre outros. Estas informações não sãomantidas noobjeto Appearance,

quefazreferênciaaoutrosobjetos NodeComponentquemantêmtaisinformações.

Estaspropriedades,ouatributos,sãodenidasusandoassubclassesde

NodeCom-ponent. Alguns exemplos, entre as várias subclasses existentes, são:

LineAttrib-utes, PoligonAttributese ColoringAttributes. Um objeto LineAttributesé

(24)

pontilhadaoutracejada-pontilhada)etratamentodeantialiasing. Umobjeto

Poly-gonAttributesdene,porexemplo,comoospolígonosserãorenderizados

(preenchi-do,wireframe ouapenas osvértices). Umobjeto ColoringAttributesdeneacor

dosobjetoseomodelodeshading.

4.3Interação

Programarumobjeto para reagiradeterminados eventos éuma capacidade

de-sejável na grande maioria das aplicações 3D. Por exemplo, um evento poderia ser

umateclapressionada,omovimentodomouseouacolisãoentreobjetos,cujareação

seria alteraralgum objeto (mudar cor, forma, posição, entre outros)ou ografo de

cenas(adicionarou excluirumobjeto). Quandoestasalteraçõessão resultantes

di-retasda ação do usuárioelas são denominadasinterações. As alteraçõesrealizadas

independentementedousuáriosãodenominadasanimações [23].

Java 3D implementa os conceitos de interação e animação na classe abstrata

Behavior. Estaclassedisponibilizaumagrandevariedadedemétodosparacapacitar

seusprogramasaperceberetratardiferentestiposde eventos. Permiteaindaqueo

programadorimplementeseusprópriosmétodos. Osbehaviors sãoosnósdografode

cenausadospara especicaroiníciodaexecuçãodeuma determinadaação baseado

na ocorrência de um conjunto de eventos, denominado WakeupCondition,ou seja,

quandodeterminadacombinaçãodeeventosocorrerJava3Ddeveacionarobehavior

correspondenteparaqueexecuteasalteraçõesprogramadas.

Uma WakeupCondition, condiçãousada para disparar um behavior, consiste de

uma combinação de objetos WakeupCriterion, que são os objetos Java 3D usados

paradenirumeventoouumacombinaçãológicadeeventos.

Osbehaviors sãorepresentadosnografodecenaporumnóLeaf,semprefazendo

referênciaaumobjetodografo. Éatravésdesteobjeto,denominadoobjeto-alvo,eem

geralrepresentadoporumTranformGroup,queosbehaviors promovemasalterações

nomundo virtual.

Todososbehaviors sãosubclassesdaclasseabstrataBehavior. Elescompartilham

umaestruturabásicacompostadeummétodoconstrutor,ummétodoinicializadore

ummétodoprocessStimulus.

Ométodoinitializeéchamadouma vez quandoobehavior torna-sevivo. No

casode umnóBehavior,ofato deestar vivosignicaque ele está pronto para ser

invocado. Dene-seneste métodoovalorinicialdaWakeupCondition.

OmétodoprocessStimuluséchamadoquandoacondiçãodedisparoespecicada

para obehavior ocorrere ele estiverativo. Esta rotina entãoefetua todo o

proces-samento programadoe dene a próxima WakeupCondition, i.e., informa quando o

behavior deveserinvocadonovamente.

Poruma questãode desempenho, oprogramadordene uma região limitada do

espaçodenominadascheduling bound paraobehavior. Eleéditoestarativoquando

(25)

aptosarecebereventos[24].

4.4Animação

Algumas alterações do mundo virtual podem ser realizadas independentemente

da ação dousuário. Elaspodem,por exemplo, serdisparadas em função dopassar

do tempo. Como comentado anteriormente, estas alterações são denominadas

ani-mações. AnimaçõesemJava3Dtambémsãoimplementadasusandobehaviors. Java

3Ddisponibilizaalgunsconjuntosdeclasses,tambémbaseadasembehaviors, quesão

próprias para implementar animações. Um primeiro conjunto destas classes são os

interpoladores.

OsInterpolatorssãoversõesespecializadasdebehaviors usadosparageraruma

animaçãobaseadanotempo. Oprocessode animaçãoaconteceatravésde dois

ma-peamentos. No primeiro, um dadointervalode tempoé mapeado sobre ointervalo

fechadoI=[0.0, 1.0], a seguirI émapeado em um espaço de valorespertinente ao

objetodografodecenasquesedesejaanimar(porexemplo,atributosdeumobjeto

Shape3Douatransformadaassociadaaumobjeto TransformGroup).

Oprimeiromapeamentoéefetuado por umobjeto Alpha,quedeterminacomoo

temposerámapeadodeformaagerarosvaloresdointervaloI,denominadosvalores

alpha. Alphapode ser visto como uma aplicação do tempo que fornece osvalores

alphaemfunçãodosseusparâmetrosedotempo.

OsegundomapeamentoédeterminadoporumobjetoInterpolatorque,a

par-tir dos valores alpha, realiza a animação do objeto referenciado. O programador

podeprojetarseusprópriosinterpoladoresusandoosvaloresalphaparaanimar

obje-tos do mundo virtual. No entanto, Java 3D disponibiliza os Interpolators, que

atendem a maioria das aplicações (ColorInterpolator, PositionInterpolator,

RotationInterpolatorentre outros). O procedimento usado para adicionar um

objetoInterpolatorsegueumpadrãobásico,queindependedotipodeinterpolador

a ser usado: i) criar o objeto a ser interpolado, oobjeto-alvo; ii) criar um objeto

Alphaquedescrevecomogeraros valoresalpha; iii) criarumobjeto Interpolator

usandoAlphaeoobjeto-alvo;iv) atribuirumschedulingbound aoInterpolator;v)

anexaroInterpolatoraografodecenas;

ExistemaindaasclassesbillboardeLOD(LevelofDetail)quetambémpermitem

especicaranimações,masnesteconjuntodeclassesasalteraçõessãoguiadassegundo

aorientaçãoouposiçãodavista[23].

4.5Usando Java 3D

AAPIJava3Desuadocumentaçãosãoencontradasemhttp://java.sun.com/

products/java-media/3D/. ParasuautilizaçãoénecessáriooambienteJava2(SDK

1.2paraSolarisouSDKouJRE1.2.2paraWindows,ouversõesmaisrecentes). Para

(26)

plug-inpara atualizaramáquinavirtualJavadobrowserparaaversão2. Oplug-in

podeserobtidogratuitamente emhttp://java.sun.com/products/plugin.

Oconjunto decapacidadesincorporadoporJava3Dofereceumambientede

de-senvolvimentodealtonívelparaodesenvolvimentoemanipulaçãodecomplexas

apli-cações3D.Aprogramaçãodealtonível,noentanto,éobtidaescondendodo

progra-madordetalhesdemaisbaixonível,porexemplo,noprocessoderenderização,oque

implicamenosexibilidade. Emcontrapartidaprogramadorescompoucaexperiência

emprogramação3Dpodemcriarmaisfacilmentemundosvirtuaisemsuasaplicações.

Java3D,porserumaAPIdalinguagemJava,trabalhanoníveldestalinguagem

(linguagem de programação orientada a objetos de alto nível). No entanto, para

modelarambientes3D, aindaexistem possibilidades demais altonível, tais como a

VRML, que éessencialmente uma linguagemde script mais descritiva edireta que

Java3D.

5 VRML (Virtual Reality Modeling Language)

AlinguagemVRMLsurgiudanecessidadedeproverumformatográco3Dpara

a Web seguindo um modelo similar à HTML, ou seja, uma linguagem textual

in-dependente de plataforma para a descrição de cenas. A linguagem escolhida como

referência foi a Open Inventor da SGI. Em 1995 foi lançada a VRML 1.0, que era

basicamenteumformatoparaadescriçãodecenasestáticas3D.Em1997foilançada

aVRML 2.0(ou VRML 97)[25], que adicionou àlinguagemconceitos derealidade

virtual,taiscomo possibilidade demoverobjetos dacenaecriaçãodesensorespara

detectaregerareventos.

OprojetodaVRMLsemprefoiaberto. Asespecicaçõessãoescritasporum

con-sórcioenvolvendo várias empresas e pesquisadores acadêmicos e são imediatamente

disponibilizadaspara realimentação, sugestões e críticas de toda a comunidade

in-teressada. Até 1999,este consórciosechamavaVRML Consortium,edepoispassou

a se chamar Web 3D Consortium [29]. Sua principal atividade é a elaboração e

manutençãodenovospadrõesparaatransmissãodeconteúdotridimensionalatravés

daWeb. Dentreoutrastarefas,istoincluiumamelhorintegraçãoentreVRML,Java

3D,MPEG-4eoutrastecnologiasrelacionadas.

5.1Estruturahierárquica da cena

OparadigmaparaacriaçãodecenasVRML (tambémchamadasmundosVRML

VRMLworlds)ébaseadoemnós,quesãoconjuntosdeabstraçõesdeobjetosede

certasentidadesdomundoreal,tais comoformasgeométricas,luzesom.

AssimcomoemJava3D,ummundoVRML éumgrafohierárquicoem formade

árvore. As hierarquias sãocriadas atravésde nósde agrupamento, osquaiscontêm

(27)

denósemVRML[12]:

Agrupamento. Criam a estrutura hierárquica da cena e permitem que operações

sejamaplicadasaumconjuntodenóssimultaneamente. Algunsexemplosdesse

tipodenósão:

Transform. É umnódeagrupamento quedene umsistemade coordenadas

paraseuslhosqueestárelacionadocomosistemadecoordenadasdeseus

pais. Sobre este sistema de coordenadaspodem ser realizadas operações

detranslação,rotaçãoeescalonamento.

Anchor. ÉumnódeagrupamentoquerecuperaoconteúdodeumURLquando

o usuário ativa alguma geometria contida em algum de seus nós lhos

(pressionaobotão domousesobreeles,porexemplo).

Group. EquivalenteaonóTransformsemoscamposdetransformação.

Geométrico. Dene a formae aaparênciade umobjeto do mundo. Onó Shape,

em particular, possuidoisparâmetros: geometry,quedene aformado

obje-to e appearance, que dene aspropriedades visuaisdos objetos (material ou

textura). Alguns exemplos de nós geométricos (usados no campo geometry

do nó Shape) são: Box, Cone, Cylinder, Sphere, Text, IndexedLineSet e

IndexedFaceSet. Estes dois últimos descrevem, respectivamente, objetos 3D

a partir de segmentos de reta epolígonos cujos vértices estão localizados em

coordenadasdadas.

Appearance. Apareceapenas nocampoappearancede um nó Shapee é

respon-sávelpela denição daspropriedadesvisuaisdasgurasgeométricas(material

etextura).

Câmera. O nóViewpoint dene, entre outros parâmetros, aposição e orientação

dacâmera(pontodevistadousuário).

Iluminação. ExistemtrêstiposdenósdeiluminaçãoemVRML:DirectionalLight

(fonte deluzdirecionalcomraiosparalelos),PointLight(fontedeluzpontual

em umlocal xo)eSpotLight(conedirecionaldeiluminação).

Alémdessestiposbásicos,existemaindaosnóssensores,osinterpoladoreseonó

Script,queserãovistos maisadiante.

5.2Prototipação ereuso

Osmecanismosde prototipaçãodaVRML permitemdenirum novotipodenó

baseadonacombinaçãodenósjáexistentes. Épermitido,inclusive,acriaçãodecenas

distribuídas,poisosubgrafo(protótipo)podeserdenidoemumarquivoremotocujo

(28)

Atribuindo-se um nome a um nó através da palavra DEF, pode-se futuramente

referenciá-loatravésdapalavraUSE.Sendoassim,casosejanecessáriaareutilização

deummesmonóváriasvezesemumacena,émaisecienteatribuir-lheumnomena

primeiravezqueeleédescritoeposteriormentereferenciá-loporestenome.

Emresumo,VRMLpermiteoencapsulamento(protótipos)ereutilizaçãode

sub-grafosdacena. OexemploaseguirmostraumacenaVRMLsimples(2conesverdes),

utilizandoalgunsdosconceitosapresentadosatéaqui(aprimeiralinhadoarquivodeve

sersempre#VRML V2.0 utf8eoscomentáriosdevem começarcom#):

#VRML V2.0 utf8

# Posição da câmera (ou observador)

Viewpoint { position 0 0 10 }

# Fonte de luz pontual

PointLight{

color 1 1 1 # luz branca

location 0 0 2 # posição da fonte

on TRUE # está "ligada"

radius 20 }

Transform {

# Um cone é definido e posicionado na origem

children [

DEF Cone_Verde Shape {

geometry Cone {} # cone

appearance Appearance {

material Material {

diffuseColor 0 1 0 } # cor verde

}

}

# reutilização do cone

Transform {

translation 2 0 3 # posicionamento em (2 0 3)

children USE Cone_Verde }

]

}

5.3Tipos de parâmetrose roteamento de eventos

CadanóVRMLdeneumnome,umtipoeumvalordefaultparaseusparâmetros.

Hádois tiposde parâmetrospossíveis: campos (elds)e eventos(events). Campos

podemsermodicáveis(exposedFields) ounão (elds).

OseventospodemserenviadosparaoutrosnósporumparâmetrodotipoeventOut

e recebidos por um eventIn. Eventos sinalizam mudançascausadas por estímulos

externos e podem ser propagados entre os nós da cena por meio de roteamentos

(29)

move

start

a cada

pulso de

relógio

sobre um objeto

usuário clica

TouchSensor

calcula

função

nova

posição

interpolação

de

TimeSensor

PositionInterpolator

Nó geométrico

Figura5: RoteamentodeeventosemumainteraçãotípicadeVRML.

elessejameventosdomesmotipo.

5.4Sensores e interpoladores

Os nós sensores e interpoladores são especialmente importantes porque são os

responsáveispelainteratividadeedinamismodosmundos VRML.

Ossensores geram eventos baseadosnas açõesdo usuário. Onó TouchSensor,

porexemplo,detectaquandoousuárioacionaomousesobreumdeterminadoobjeto

(ougrupode objetos) dacena. OProximitySensor,porsuavez, detectaquandoo

usuárioestá navegandoem umaregião próximaao objeto de interesse. Ossensores

sãoresponsáveispelainteraçãocomousuário,masnãoestãorestritosagerareventos

a partirdeaçõesdosmesmos. OTimeSensor, porexemplo, gera automaticamente

um evento acadapulso dorelógio. OseventOuts geradospelos sensorespodemser

ligadosaoutroseventIns dacena, iniciandoumaanimação,porexemplo.

Aformamaiscomumdesecriaranimaçõeséusandokeyframes (quadros-chave),

especicandoosmomentos-chavenaseqüênciadaanimação.Osquadrosintermediários

são obtidosatravés da interpolação dos quadros-chave. Nós interpoladores servem

para denireste tipo de animação, associando valores-chave (de posição, cor, etc.)

queserãolinearmenteinterpolados. Algunsexemplosdeinterpoladoressão:

PositionInterpolator,OrientationInterpolator,ColorInterpolatore

CoordinateInterpolator.

Oseventos gerados por sensores einterpoladores, ligados a nós geométricos, de

iluminação ou de agrupamento, podem denir comportamentos dinâmicos para os

elementosdoambiente. Umexemplotípico(Figura5) érotear umTouchSensorem

um TimeSensor, causando o disparo do relógio quando o usuário clicar sobre um

objeto. OTimeSensor,porsuavez,éroteadoemuminterpolador,enviandoparaele

valoresdetempoparaafunçãode interpolação. Ointerpoladorentãoéroteado em

umnógeométrico,denindoasalteraçõesdesteobjeto.

5.5Nó Script

Apesar de serumrecurso poderoso, oroteamentode eventosentre osnósnão é

sucienteparaotratamentodeváriasclassesdecomportamento. Porexemplo,nãoé

Referências

Documentos relacionados

• Global Navigation Satellite System (GNSS) Receiver: Will be used to receive the location of the user, in order to correctly locate a specific thermal data in the map.. The

A abordagem da técnica instrumental será baseada nos métodos de Abel Carlevaro (1974) e Scott Tennant (2005), mas não será conservadora, pois vão ser propostas

There were not patients with less than 18 years or relevant cognitive decline (MMSE &gt; 26). Patients without these criteria were not analyzed.. 21 symptoms), the essentials

For the excitation and decay of photo-induced conductivity measurements, samples were irradiated with an intensity-controlled halogen-tungsten lamp (Oriel) through

A vontade de obter mais conhecimento na área desportiva não desapareceu. Pelo contrário, foi crescendo e muito, sobretudo pelas personagens secundárias que

Trata-se de um estudo de caso 20 , de caráter ex- ploratório, que utilizando da análise ecológica de grupos múltiplos, em que as unidades tomadas para observação não são

The second set of data was collected as a sam- ple, in a field survey carried out between 2013 and 2014, within the framework of the studies of social and environmental