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