Universidade do Vale do Paraíba Colégio Técnico Antônio Teixeira Fernandes Disciplina Introdução a Computação Gráfica (ICG) Material III-Bimestre Transformação Geométrica em 3D. Temporizadores e Rotas. Definições para reaproveitamento de código Reaproveitamento de Cenas. Reproduzindo Filmes em Cenas. Reproduzindo sons em Cenas. Inserindo texto em uma Cena. Sensor de Toque. Sensor de Proximidade. Site : http://www1.univap.br/~wagner Prof. Responsável Wagner Santos C. de Jesus 1 Transformações Geométricas em 3D Chamamos de transformação o ato de levar um objeto de um ponto para outro, num sistema de referências. As transformações mais usadas são : • Translação • Rotação • Escala. 2 Criando uma Transformação Transform Transform {} – Cria a transformação children [] – Estrutura filha para a transformação. 3 Exemplo : Transform { children [ Shape { geometry Sphere { } } ] } 4 #VRML V2.0 utf8 ... Transform { translation 3 0 3 children [ Shape { .... geometry Sphere { } } ] } Transform { scale .5 .5 .5 rotation 0 1 0 .7535 children [ Shape { ...... geometry Box { } } ] } Transform { translation -3 0 -3 rotation 1 0 0 1.57 children [ Shape { ..... geometry Cone { } } ] } 5 Escala Determina o tamanho do objeto. Sintaxe : (-x a x), (-y a y), (-z a z) scale x y z y z x 6 Exemplo de Escala Transform { scale .3 .3 .3 children[ Shape { appearance Appearance { material Material { diffuseColor 0 0.59 0 } x=.3, y= .3, z= .3 } geometry Box { } } ]} 7 Translação Determina a movimentação do objeto. Sintaxe : (-x a x), (-y a y), (-z a z) y translation x y z z x 8 Exemplo de Translação Transform { translation 3 0 0 children[ Shape { appearance Appearance { material Material { diffuseColor 0 0.59 0 } x=3,y=0,z=0 + } geometry Box { } } ]} - + - 9 Rotação Determina a rotação para um objeto. Sintaxe : ( 0 – 1) – valores para x y z y rotation x y z ângulo x z 10 Exemplo de Rotação Transform { rotation 0 0 1 0.78 children[ Shape { appearance Appearance { y material Material { diffuseColor 0 0.59 0 } } geometry Box { } } x ]} z 11 center e scaleOrientation center – Define o centro da escala de transformação. scaleOrientation – Define o eixo de rotação para escala de operação. 12 Reaproveitamento de cenas Inline {} – permite trazer parte de uma cena dentro do ambiente criado em uma outra cena. Sintaxe: Inline { url [ “Caminho” ] } 13 Diagrama de reaproveitamento de cenas Cena Principal Sub-Cena Chamada por Inline{} 14 Exemplo : Inline { url [ " Cubo.wrl " ] } ou Transform { rotation 1 0 0 0.785398163397448 translation 0 0 0 children[ Inline { url [ "cubopos.wrl" ] } ] } 15 Definições de figuras DEF : Determina um nome para a figura que irá compor a cena. Exemplo : DEF FIGURA Transform { translation 3 0 0 children[ Shape { appearance Appearance { material Material { diffuseColor 1 0 0 } } geometry Cylinder { } } ]} 16 Reproduzindo filmes em cenas MovieTexture { } – atribui a um objeto um filme que será dado como textura em movimento. Sintaxe : texture MovieTexture { url ["mpg ou avi"] loop booleano stopTime -n } 17 Propriedade Valor url Caminho do arquivo de imagens loop Determina se o fim vai estar parado ou em movimento (true/false). Um valor negativo que determina o tempo de execução da animação do filme. stopTime 18 Exemplo MoviTexture Shape { appearance Appearance { texture MovieTexture { url ["C:\clock.avi"] loop TRUE stopTime -1 } } geometry Box { } } 19 Criando sons em uma cena sound Elipsóide Mínimo Elipsóide Máximo 0 db -20 db direção Atenuação maxFront maxBack minBack minFront direction location 20 AudioCLip : aponta para o arquivo de sons que será reproduzido. Sound AudioCLip Arquivo de Sons (wav,mp3..) 21 Propriedades da instrução sound. Frontal Máximo(MaxFont): determina o alcance do som. Frontal mínimo(MinFront): determina a alcance mais interno para o som. Maximo do fundo(MaxBack): determina valores relativos, próximos da faixa de localização de emissão do som. Mínimo do fundo (MinBack): determina valores relativos internos a faixa de localização de emissão do som. Localização (location): Determina o local, em relação aos eixos x, y e z, de propagação do som. Direção (direction): Determina em que direção o som irá se propagar em relação aos eixos. 22 Sintaxe: AudioCLip source AudioClip { loop boolean url [ caminho url ] } 23 Exemplo : sound Sound { maxFront 50 minBack 50 source AudioClip { loop TRUE url ["Beethoven.mp3"] } } 24 Textos em cenas Shape geometry Text String[] FontStyle 25 Inserindo texto na cena geometry Text geometry Text { } – permite escrever um texto que será exibido na cena em formato 3D. Propriedade string [], Exemplo : geometry Text { string [“texto a ser exibido”] } 26 Exemplo Prático: Shape { geometry Text { string[“Informática”] } } 27 Configurando Fonte : FontStyle PLAIN (letra padrão), BOLD (negrito), ITALIC (itálico), BOLD ITALIC (ambos). size - O campo tamanho: irá definir o tamanho das letras. Poderão ser indicados valores entre (Zero e UM), ou um número de zero a infinito. Se um número negativo for colocado o texto será invertido. spacing - servirá para definir o espaçamento entre duas linhas de texto. Também pode-se definir um número negativo, fazendo com que o texto que estiver abaixo mude para posição oposta. horizontal - o campo horizontal: irá definir se o texto será escrito da esquerda para a direita. Se a propriedade for mudada para FALSE o texto irá ser escrito na vertical. topToBottom - o campo de cima para baixo: irá definir com que o texto seja escrito na seqüência natural. Caso a propriedade seja mudada para FALSE, o texto que deveria estar embaixo será enviado para cima, ou seja, haverá uma inversão da ordem na qual ele foi escrito. justify - o campo justificar: servirá para definir o alinhamento entre as linhas do texto. As opções são: BEGIN - alinha o texto da esquerda para direita (alinhamento padrão); FIRST - faz o alinhamento pela primeira palavra do texto; MIDDLE - centraliza o texto com base na palavra que tiver o maior número de caracteres; END - ajusta o texto usando como referencia o último caractere da primeira palavra. leftToRighto o campo da esquerda para direita: irá permitir com que o texto seja escrito na forma convencional, ou de maneira invertida, quando a propriedade estiver modificada para FALSE. family o campo família: irá determinar o tipo de letra que deverá ser usada no texto, sendo o permitidas somente a indicação de um dos três tipos: SERIF, SANS e TYPEWRITER. 28 Sintaxe : FontStyle fontStyle FontStyle { <Estilos de Fontes> } 29 Exemplo : fontStyle FontStyle { family "SERIF" style "PLAIN" size 0.31 spacing 0.23 justify "BEGIN" horizontal TRUE leftToRight TRUE topToBottom TRUE } 30 Temporizador Para se determinar o tempo de execução para um movimento de um elemento contido em uma cena se faz necessário o recurso do temporizador. (TimeSensor) 31 Sintaxe : DEF TIMER TimeSensor {} – cria um temporizador com recurso de liga e desliga e o intervalo de tempo para executar animações. 32 Propriedade do TimeSensor Propriedade cycleInterval loop Valor Valor correspondente a tempo em segundos 0, Repetir ou não a freqüência da animação (true/false). 33 Exemplo : TimeSensor DEF TIMER TimeSensor { cycleInterval 1 loop FALSE } 34 Rotas Rotas são caminhos traçados para que um objeto da cena percorra um deslocamento em x,y ou z. realizando movimentos de rotação ou translação. 35 Movimento de figuras Transformação Figura (Shape) Quadro (Orientação/Posição) Eixo de Movimentação ] Temporizador 36 Tipos de rotas OrientationInterpolator – define caminho de rotação para os eixos x,y e z. PositionInterpolator – define rota de translação para os eixos x,y e z. 37 Propriedades key e keyValue Key[] – determina a divisão dos quadros para serem animados. (0 – 1) keyValue[] – determina os valores de deslocamento nos eixos x,y e z. (- a ) 38 Timer Sensor tick 0 0 .1 .2 .3 .4 .5 cycleInterval .6 .7 .8 .9 1 fraction_changed = .415 key 0 1 Interpolador V1 V2 V3 . . . . . . . . . . . . . . . . Vn keyValues 39 Key – Valores de quadros Key[ 0 0.05 0.1 0.15 0.2 0.25 0.3.....n] keyValue – Valores dos eixos keyValue [ 0 0 0 0 0 0 0 0 0 0 ............ ] 0, 0.2, 0.4, 0.6, 0.8, 40 Exemplo (rotação): OrientationInterpolator DEF ROTOR OrientationInterpolator { Key[ 0 0.05 0.1 0.15 0.2 0.25 0.3.....] keyValue [ 1 0 0 0, 1 0 0 3.14, 1 0 0 6.28, 1 0 0 9.42, 1 0 0 12.56, 1 0 0 15.7, ] } 41 Exemplo (Translação): PositionInterpolator DEF ROTOR PositionInterpolator { Key[ 0 0.05 0.1 0.15 0.2 0.25 0.3.....] keyValue [ 0 0 0, 0 0 0.2, 0 0 0.4, 0 0 0.6, 0 0 0.8, ]} 42 Executando Rotas Interpolador TimeSensor OrientationInterpolator Rotação PositionInterpolator Translação ROUTE 43 ROUTE (Executando Rotas) Determinar que tipo de figuras será executada mediante as rotas que foram criadas e qual temporizador será usado para realizar a translação ou rotação. 44 Associando ROUTE ao TimeSensor Propriedades fraction_changed – Evento que é executado na troca de valores do temporizador. value_changed – Substitui os valores no ROUTER para realizar o deslocamento. set_fraction – Captura valores correspondentes aos quadros que deverão ser movimentados. rotation – Captura elementos de rotação dos eixos. translation – Captura os elemento para translação dos eixos 45 Sintaxe : ROUTE TO ROUTE <objeto>.propriedade TO <objeto_router>.propriedade 46 Exemplo prático (Rotação) ROUTE TIMER.fraction_changed TO ROTOR.set_fraction ROUTE ROTOR.value_changed TO FIGURA.rotation Exemplo prático (Translação) ROUTE TIMER.fraction_changed TO ROTOR.set_fraction ROUTE ROTOR.value_changed TO FIGURA.translation 47 Sensor de Toque : TouchSensor{} Determina a sensibilidade em um determinado objeto ao passar ou clicar com mouse. TouchSensor TimeSensor Objeto Interpolador 48 Exemplo Associação do sensor com o objeto DEF FIGURA Transform { children[ DEF TOQUE TouchSensor{} Shape { appearance Appearance { material Material { diffuseColor 0 0.7 0 } } geometry Cone { side TRUE bottom TRUE } } ]} 49 Observação sobre TimeSensor DEF TIMER TimeSensor { cycleInterval 10 loop FALSE } É necessário que a propriedade loop seja FALSE, para que o sensor de toque funcione. 50 Propriedade ROUTE para TouchSensor{} touchTime – Verifica se houve uma mudança no temporizador. isOver – Coloca em loop por intermédio de um simples movimento do mouse. 51 Exemplo prático ROUTE TOQUE.touchTime TO TIMER.startTime ROUTE TOQUE.isOver TO TIMER.loop ROUTE TIMER.fraction_changed TO ROTOR.set_fraction ROUTE ROTOR.value_changed TO FIGURA.translation 52 Sensor de Aproximação : ProximitySensor {} Determina a sensibilidade em um determinado objeto havendo aproximação no mesmo. ProximitySensor TimeSensor Objeto Interpolador 53 Exemplo : ProximitySensor DEF ABREFECHA ProximitySensor { center 0 0 0 size 5 2 8 } 54 Exemplo ROUTER ROUTE ABREFECHA.enterTime TO TIMER.startTime ROUTE ABREFECHA.exitTime TO TIMER.startTime 55