Universidade do Vale do Paraíba Colégio Técnico Antônio Teixeira Fernandes Disciplina Introdução a Computação Gráfica (ICG) Material IV-Bimestre Agrupamentos de Figuras, Criação de protótipos. Ajuste de objetos 2D em Cenas 3D, Reconhecendo Colisões, Grades de elevação,Construindo geometria de faces,Extrusão, Criação de ancoras,Usandos JavaScript Vrml. Site : http://www1.univap.br/~wagner Prof. Responsável Wagner Santos C. de Jesus 1 Agrupamento : Group Permite realizar um agrupamento quando existe figura que possuem as mesmas características para formar uma cena. 2 Agrupamento de figuras. Geometria Cylinder Cone Group Box Sphere Formas 3 Estrutura Básica : Group Group { children [ ....... // Figuras e formas ] } 4 Aproveitando Características da cena Cone1 Aplica Característica Cone USE Cone2 Cone2 Cone3 Cone4 .........N 5 USE – Realiza um clone da figura Sintaxe : Transform { USE Nome-DEF } 6 Exemplo : USE DEF FIGURA Transform { translation -3 0 0 children[ Shape { geometry Cone {} }] } Transform { translation 3 0 0 children[ USE FIGURA ]} 7 Exemplo : Group/USE Group { children [ Shape { appearance DEF teste Appearance { material Material { diffuseColor 0.38 0 0 transparency 0 } } geometry Cylinder { } }, Transform { translation -3 0 0 children[ Shape { appearance USE teste geometry Sphere { radius 1 } }, ]} ] } 8 Criando protótipos Os protótipos são usados em computação gráfica para realizar reaproveitamento de parâmetros ou figuras contidos em uma cena. Protótipo Figura Figura Original 9 PROTO Cria uma estrutura do tipo protótipo para uma figura ou forma geométrica. Sintaxe : PROTO Nome-Estrutura [ <def-campos>] { // Forma da Figura } 10 Exemplo de protótipo PROTO CILINDRO [ field SFColor CilindroColor 1 1 1 field SFFloat CilindroRadius 1 field SFFloat CilindroHeight 2 ] { Shape { appearance Appearance { material Material { diffuseColor IS CilindroColor shininess .5 emissiveColor 0.16 0.16 0.16 } } geometry Cylinder { radius IS CilindroRadius height IS CilindroHeight side TRUE # Default bottom TRUE # Default } } } Transform { children[ CILINDRO { CilindroColor 1 0 0 CilindroRadius 1.5 CilindroHeight 4 } ] } 11 Colisões: Collision Colisão em computação gráfica vem a ser o procedimento de simular quando um objeto se encontra com um observador em VRML pode se caracterizar uma colisão; como uma figura que se movimenta em direção ao observador. 12 Esquema de colisão Anel de Colisão Aproximação do objeto 13 Sintaxe : Collision DEF nome Collision { children [ ...... Formas ] } 14 Exemplo : Colisão DEF col Collision { children [ Sound { source DEF ac AudioClip { loop TRUE url "c:\vrml2\TestSnd.wav" } } Shape { appearance Appearance { material Material {}} geometry Sphere {} } ] } ROUTE col.collideTime TO ac.set_startTime } 15 Grades de elevação: ElevationGrid Permite criar uma matriz de pontos onde a elevação desses pontos podem simular objetos como montanhas, vales, folhas de papel amassado etc. 16 Estrutura da grade. Figura da Cena Shape Aparência geometry ElevationGrid height(Pontos) 17 Dimensões : ElevationGrid Ângulo de prega Dimensão - x Espaço - x 18 Campos Descrição xDimension Determina a dimensões das colunas de uma grade. Valor entre 0 e Determina as dimensões das linhas de uma grade. Valor zDimension entre 0 e xSpacing Determina o espaçamento entre as colunas da grade. zSpacing Determina o espaçamento entre as linhas da grade. Valor Valor entre 0 e entre 0 e creaseAngle O ângulo de prega entre a elevação dos pontos. Valor entre 0 e solid Determina se a figura irá aparecer com aparência vazada ou não. Booleano true/false. height Determina os pontos que formarão a matriz da grade. 19 Sintaxe : ElevationGrid Shape { appearance Appearance { material Material {......................} } geometry ElevationGrid { xDimension x zDimension z xSpacing sx zSpacing sz creaseAngle n solid Boolean height [ <Definição da matriz> ] } } 20 Exemplo ElevationGrid Shape { appearance Appearance { material Material { diffuseColor 0.6 0.6 0.2 } } geometry ElevationGrid { xDimension 4 zDimension 4 xSpacing 1.0 zSpacing 1.0 creaseAngle 1.57 solid FALSE height [ 0000 0000 0 0.6 0 0 0000 ] } } 21 Âncora : Anchor Realiza a mudança de cena por intermédio da interação com o usuário. Bastando que o usuário selecione o objeto ancorado para que seja efetuada a mudança. Anchor children Shape Aparência 22 Sintaxe : Anchor Anchor { url String children [Shape { ....... }] } url : Determina o caminho do arquivo com a cena que será executado. 23 Exemplo : Anchor Anchor { url "c:/caminho/cone.wrl" children [ Shape { geometry Box {} } ] } 24 Geometria de faces: IndexedFaceSet A geometria de faces é um conceito da computação gráfica (realidade virtual) que permite a construção de tipos genéricos de figuras. geometry IndexedFaceSet point (Pontos) 25 Estrutura da IndexedFaceSet Figura da Cena Shape Aparência Geometry IndexedFaceSet Coordinate point (Pontos) 26 Sintaxe : IndexedFaceSet Shape { geometry IndexedFaceSet { coord Coordinate { point [ Pontos ] } coordIndex [ Indices dos pontos ] } } 27 Exemplo : IndexedFaceSet Shape { geometry IndexedFaceSet { coord Coordinate { point [ 0 11 11 , , , 1 14 1 , , , 0 0 0 #0 #1 #2 ] } coordIndex [ 2,1,0,-1 0,1,2,-1 ] } } 28 Criando Textura nas faces TextureCoordinate 0, 1 1, 1 Objeto 0, 0 1, 0 Usar as coordenadas para uma única figura. 29 Criando Textura nas faces TextureCoordinate 0, 3 3, 3 Objeto 0, 0 3, 0 Usar as coordenadas para mais de uma figura. 30 Exemplo de TextureCoordinate texCoord TextureCoordinate { point [ 4 0, 4 4, 0 4, 0 0 ] } 31 Exemplo - 1: #VRML V2.0 utf8 NavigationInfo { type "EXAMINE" } Shape { appearance Appearance { texture ImageTexture { url ["c:\Imagem.jpg"] } } geometry IndexedFaceSet { coord Coordinate { point[ 0 1 0, 11 14 0, 11 1 0 ] } coordIndex [ 2, 1, 0, -1 0, 1, 2, -1 ] texCoord TextureCoordinate { point [ 4 0, 4 4, 0 4, 0 0 ] } } } 32 Extrusão (Extrusion) Vem a ser o conceito de explodir uma seqüências de pontos em figuras determinando formas tridimensionais. Normalmente uma extrusão deve ser feita baseada em equações matemáticas trabalhadas nos eixo (x,y e z). 33 Estrutura de uma Extrusão Shape geometry Extrusion crossSection[] spine[] 34 Tabela de propriedades Campos Descrição beginCap Fecha ou não uma forma de interior aberto na parte superior TRUE/FALSE endCap Fecha ou não uma forma de interior aberto na parte inferior TRUE/FALSE convex Cria convecção na vista da forma que esta sendo observada. TRUE/FALSE solid Tira a transparência das paredes da figura. TRUE/FALSE crossSection Determina os pontos que formarão a figura que sofrerá extrusão. Valores (x,y e z) (seção de cruzamento) spine Espinha dorsal são valores que determinam a forma para a figura. 35 Sintaxe : Extrusion geometry Extrusion { beginCap Boolean endCap Boolean convex Boolean solid Boolean crossSection[ x0 y0 z0 x1 y1 z1...xn yn zn ] spine [ x0 y0 z0, x1 y1 z1, ...xn yn zn] } 36 Exemplo : Shape{ geometry Extrusion { spine [0 0 0, 0 5 0, 0 6 1, 0 6.5 2, 0 7 4, 0 7 4.3] } } spine y z Extrusão x 37 Exemplo : Retângulo => Cubo y Shape{ geometry Extrusion { beginCap TRUE endCap TRUE convex FALSE crossSection[ -11 11 11 -12 -11 ] spine [ 2 2 ] } , , , , , 11 11 -11 -12 11 8 -5 x spine z 0, 0, } 38 Exemplo : Triângulo => Pirâmide Shape{ geometry Extrusion { crossSection[ 3 13 22 3 ] spine [ 3 3 ] } , , , , 4 20 5 4 8 -6 0, 0, } 39 Usando JavaScript/VRML Para se determinar ações HTML e Javascript em uma cena possibilitando criar formulários com tela de acesso juntos permitindo maior interação de interface com usuário. 40 <Script src> </Script> Para se criar um código JavaScript que será que irá carregar um código VRML. Exemplo : <Script src = dll </Script> 41 xpsp3res.dll Código xpsp3res.dll objectembed.js VRML ObjectLoad() Visualização da Cena Formulário 42 Exemplo de Programas <html> <head> <script src="res://xpsp3res.dll/objectembed.js"> </script> </head> <body objectSource="file:///C:/vrml2/box.wrl" onload="ObjectLoad();" leftmargin=200 topmargin=10 scroll=no> <form id="objectDestination"></form></body></html> 43 Criação de Script para carregamento da Cena location.href Exemplo : <Script> location.href= "file:///c:/vrml2/js.html" </Script> 44 Action : permite realizar o acesso ao diretório onde se encontram os arquivos wrl que serão carregados Exemplo : <form Action=file:///c:/vrml2/js.html/> <Input type= submit value="Ok"> </Form> 45 Usando o marcador <href> Exemplo : <A Href=file:///c:/vrml2/js.html> Ok </A> 46 Criando Script F I Ações Script G U R A [ S 47 Script Realiza a interação entre uma cena e um script de JavaScript com campos, eventos e funções da linguagem VRML. Exemplo : Script { url [ "javascript: <Funções JavaScript> “] } 48 Tipos de dados VRML Em VRML como em outras linguagens de programação, existem os tipos dados para criação de variáveis ou propriedades esses inúmeros tipos servem para compatibilizar os parâmetros passados por uma figura para um modelo de variáveis que podem ser substituídas durante a execução do programa. 49 Exemplos de tipos campos field field field field field field field field SFBool bottom TRUE SFFloat height 2 # (0, ) SFFloat radius 1 # (0, ) SFBool side TRUE SFBool top TRUE SFInt32 usuário SFNode (Criação de nós - figura) SFString (Variável do tipo String) 50 Tipos de variáveis de Eventos eventIn SFBool <Varm_Evento> eventIn SFBool <Varm_Evento> eventOut SFBool <Varm_Evento> 51 Estrutura completa Script Group { children [ DEF .... Definições de figuras DEF Java_Script Script { ... <Variáveis Eventos ou Campos> .... url [ “javascript: ... Programa..... “] } ] } 52 Ligando e desligando a luz da cena refletida no cubo. Emissão de luz Liga Desliga Exemplo : JavaIlumina.wrl 53 Ligando e desligando a luz da cena Emissão de luz Liga/Desliga Exemplo : BrillhoJavaScript.wrl 54 Switch Permite realizar a mudança de estado ativo ou não mediante a seleção do objeto. Podendo substituir um objeto na tela em tempo de execução. Exemplo : DEF nome Switch { choice [ ..... ] } Exemplo =>EsferaCuboJs.wrl 55 Ação (Cena) String (VRML) Browser createVrmlFromString() Criação de figuras em tempo de execução. 56 createVrmlFromString() Dada uma string contendo a geometria da figura o método createVrmlFromString() irá montá-la usando as especificações determinadas criando um nó. Sintaxe : node = Browser.createVrmlFromString(string); 57 addChildren Essa propriedade cria a figura no vídeo especificada com o novo nó. Exemplo: Objetonode.addChildren = tempNode; 58 Exemplo : criação de objetos DEF Scene Group { children [ DEF Sensor TouchSensor {} Shape { appearance Appearance { material Material { diffuseColor .1 .44 .22 shininess .1 specularColor .15 .15 .02 ambientIntensity 0 emissiveColor .04 .18 .09 } } geometry Box { size 1 1 1 } } ]} DEF AddedObject Group { children [ ] } DEF Generate Script { eventIn SFTime touchTime field SFNode addedObject USE AddedObject field MFNode tempNode [] field SFString str "" directOutput TRUE url "javascript: function touchTime (val) { str = 'Transform { children [Shape {geometry Sphere{} } ] }'; tempNode=Browser.createVrmlFromString(str); addedObject.addChildren=tempNode; } " } ROUTE Sensor.touchTime TO Generate.touchTime 59 addRoute() Cria comunicação com as instruções de Rota, para gerar animações de figuras. Parâmetros Temporizador a d d Troca de valores R o Nó aparência Material ROUTE Browser u t e 60 Exemplo método : addRoute() Browser.addRoute(timer, 'fraction_changed', tempNode[0].children[0].appearance.material, 'transparency'); 61 Execução das definições # Generate Executa o script ROUTE Sensor.touchTime TO Generate.touchTime # Executa temporizador ROUTE Sensor.touchTime TO Timer.startTime Exemplo : criaObjJS.wrl 62 Links (Pesquisa) http://vrmlworks.crispen.org/tutorials/JavaScript/ http://vrmlworlds.com/developer/tutorials/scripts/scripting4.html http://www.maxwell.lambda.ele.puc-rio.br/cgi-bin/PRG_0599.EXE/4949_8.PDF?NrOcoSis=12322&CdLinPrg=pt http://www.cresesb.cepel.br/VRML/cresesb_centro/cresesb_centro.wrl http://www.web3d.org/x3d/publiclists/vrml_list_archives/0404/msg00086.html 63