You are on page 1of 42

VRML - A INTERNET EM 3D

VRML: Virtual Reality Modeling


Language

Alexandre Cardoso
VRML - A Internet em 3D

 Introdução
 Geometria
 Animação
 Iluminação
 Elementos Complementares
 Conclusão
 Espaço Aberto
Introdução - o nascimento:

 1994: Mark Pesce e Brian Behlendorf


imaginam a possibilidade de
desenvolvimento de interface aberta,
gratuita, virtual, tridimensional, com
multimídia animada e interativa
 VRML 1.0 - Geometria
 VRML 2.0 - Comportamento - Agosto/96
Introdução - Por que a emoção?
 VMRL tem o potencial de permitir um novo tipo de
aplicações - baseadas na WEB com simulação
distribuída, multiusuário, grupos de discussão em
tempo real e até mesmo reuniões tridimensionais;
 Tais aplicações são o resultado de 3 importantes
fatores:
– conectividade em rede
– interação multiusuário
– interface com o usuário baseada em modelagem multimídia
tridimensional - 3D
 Enfim, a meta final é construir ciberespaços.
Introdução
 Arquivo VRML = arquivo texto - .wrl
 cabeçalho: #VRML V2.0 utf8
 O arquivo texto será uma seqüência de
nós que conterá a descrição de objetos.
 Um nó pode:
– conter outro nó - ter um filho - ex: Group
– ter um conjunto de campos, que contém
informações sobre o elemento e que
podem estar escritos em qualquer ordem.
O arranjo básico:

# VRML V2.0 utf8


Group{
children [
nó e campos ....
]
}
Geometria: Nós fundamentais:
 O Nó Shape - forma:
– Este nó contém 2 campos: o campo appearance e o campo
geometry que serão arranjados basicamente:
• Shape {
appearance NULL - define material e textura
geometry NULL - define a geometria do objeto
}
O campo geometry:
– Este campo contém valores que descrevem uma dada geometria:
Cone {
bottomRadius 1
height 2
}
Observações importantes:
 Há geometrias pré-definidas primitivas, tais como box, cylinder,
cone e geometrias avançadas, tais como extrudedShapes,
elevationGrids etc...
 Uma forma de definir um objeto em VRML consiste em usar a
seguinte linha de comando:
DEF meu_cilindro Cylinder { ... }
 Na primeira definição, o objeto é criado e pode ser usado a
partir daí pela utilização de seu nome - instância. Cada
mudança no objeto original afeta todas as instâncias. O reuso
de um nó previamente definido é feito pela linha de comando:
USE meu_cilindro
 O agrupamento de formas pode definir formas mais complexas,
através do uso do nó Group ou do nó Transform -
caracterizando a noção de nó parent e nó children
Exemplo 1
# VRML V2.0 utf8
Group {
children [
Shape{
geometry Cone {}
}
]
}
Primitivas Geométricas:
 As formas geométricas básicas:
– Box
– Cone
– Cylinder
– Sphere
– Text - formatar textos
– ElevationGrid
– Extrusion
– IndexedFaceSet
– IndexedLineSet
– PointSet
O nó appearance:
 Estrutura básica:
appearance Appearance{
material
texture
textureTransform
}
 material: define elementos de cor, reflexão de luz e
transparência do material da qual o objeto é constituído
 texture: define uma imagem, um filme ou cores particulares para
os pixel do material que constitui o objeto
 textureTransform: define mudanças da textura do material.
Textos
 Em VRML, textos são definidos pelo nó
Text
Text{
fontStyle - estilo da fonte
length[ ] - comprimento do texto
maxExtent - máxima extensão do texto
string [ ] - o texto em si - “meu texto” - entre aspas
}
Obs: há grande variedade de estilos de fontes definidos em
FontStyle, onde também se faz a definição da linguagem que
será usada - Português é dado no campo language por pt
Exemplo2 - forma e aparência: uma estação
espacial (?)
#VRML V2.0 utf8
Group{
children [
Shape {
appearance DEF Cor Appearance {
material Material {
diffuseColor 0.0 1.0 1.0 }
}
geometry Box {
size 10.0 10.0 10.0
}
},
Shape {
appearance USE Cor
geometry Sphere {
radius 7.0
}
},
Shape {
appearance USE Cor
geometry Cylinder {
radius 12.5
height 0.5
}
},
Shape {
appearance USE Cor
geometry Cylinder {
radius 4.0
height 20.0
}
},
Shape {
appearance USE Cor
geometry Cylinder {
radius 3.0
height 30.0
}
},
Shape {
appearance USE Cor
geometry Cylinder {
radius 1.0
height 60.0
}
}
]
}
Transformações - nó Transform:
 O nó Transform possibilita as transformações geométricas
necessárias, é um nó similar ao nó Group e também contém
uma lista de nós filhos
 Com este nó pode-se modificar a posição dos elementos e
prover as condições básicas para animações, que dependem
da movimentação de elementos num dado cenário
 VRML admite sistemas de coordenadas múltiplos
 Um arquivo VRML pode conter uma série de nós Transform,
com diversos sistemas de coordenadas... É possível também
definir eixos específicos de rotação de elementos e é claro,
ângulos de rotação para cada movimento desejado.
Exemplo3: usando transformações:
#VRML V2.0 utf8
#UMA CHAMINÉ CONSTRUÍDA COM PRIMITIVAS E TRANSLAÇÃO DE FORMAS

Group {
children [
Shape {
appearance DEF Cinza Appearance {
material Material {
diffuseColor 0.8 0.8 0.8}
}
geometry Cylinder {
height 2.0
radius 2.0
}
}, # Aqui o uso do nó Transform para possibilitar a translação de um
cone
# e visualizar a parte superior da chaminé.
Transform {
translation 0.0 2.0 0.0
children [
Shape {
appearance USE Cinza
geometry Cone {
height 2.0
bottomRadius 2.5
}}]}]}
Animações - o dinamismo da forma!!!
 VRML permite um grande número de animações,
que podem ser disparadas por aproximações e
toques.
 Tais animações fazem as formas se movimentarem
baseadas num dado tempo, que, é controlado por
um relógio com tempos fracionados em números
reais.
 As frações de tempo devem ser associadas a
quadros que contêm as posições chaves da
animação, dando a noção de movimento da forma.
 As animações podem ser estendidas também à
aparência das formas e não somente à posição da
forma.
Animações - aspectos básicos:
 VRML provê diversas maneiras de descrição de
animações. As mais comuns usam os nós:
– PositionInterpolator
– OrientationInterpolator
 O fundamento é a associação de posições chave
com tempos chave - de forma fracional.
 Um nó importante no processo é o nó de controle de
tempos fracionais: o nó TimeSensor:
– TimeSensor{
enabled
startTime
stopTime
cycleInterval
loop ... }
Animações - aspectos básicos:
 Sintaxe do nó PositionInterpolator:
– PositionInterpolator{
key [ ... ] - lista de tempos fracionais chave
keyValue [ ... ] - lista de posições chave - cada uma
composta por X,Y,Z
set_fraction - eventIn
value_Changed - eventOut
}
 Sintaxe do nó OrientationInterpolator:
– OrientationInterpolator
key [ ... ]
keyValue [ ... ] - lista de rotações chave - cada uma composta p
por X,Y,Z e um ângulo de rotação.
set_fraction
value_Changed }
Exemplo de animação:
#VRML V2.0 utf8

Group {
children [
DEF Cube Transform {
children Shape {
appearance Appearance {
material Material {
diffuseColor 0.0 1.0 0.0 }
}
geometry Box { size 1.0 1.0 1.0 }
}
},
# Relógio da animação - gerando tempos fracionais
DEF Clock TimeSensor {
cycleInterval 4.0
loop TRUE
},
# Caminho da animação do cubo - posições chave e valores de
# cada posição
DEF CubePath PositionInterpolator {
key [
0.00, 0.11, 0.17, 0.22,
0.33, 0.44, 0.50, 0.55,
0.66, 0.77, 0.83, 0.88,
0.99
]
keyValue [
0.0 0.0 0.0, 1.0 1.96 1.0,
1.5 2.21 1.5, 2.0 1.96 2.0,
3.0 0.0 3.0, 2.0 1.96 3.0,
1.5 2.21 3.0, 1.0 1.96 3.0,
0.0 0.0 3.0, 0.0 1.96 2.0,
0.0 2.21 1.5, 0.0 1.96 1.0,
0.0 0.0 0.0
]
# Observe a equivalência de quantidade de posições e tempos
# chave
}
]
}
ROUTE Clock.fraction_changed TO CubePath.set_fraction
ROUTE CubePath.value_changed TO Cube.set_translation
Animações: sentindo ações do usuário
 Em VRML há a possibilidade de sentir o
toque, a aproximação e os movimentos do
usuário, através do mouse, claro.
 O conjunto de nós utilizados para este fim é
constituído por:
– Nó TouchSensor
– Nó CylinderSensor
– Nó SphereSensor
– Nó PlaneSensor
 Tais nós podem ser incluídos em qualquer
grupo e com rotas, podem disparar
animações
 As ações do usuário podem promover
movimentos diversos:
 TouchSensor: sentir ações do tipo “click” e “drag”
 PlaneSensor: sensível às ações do tipo “drag”,
serve para computar distâncias de translação,
gerando mudanças de posição das formas - usado
para arrastar as formas através do cenário
 SphereSensor: sensível às ações do tipo “drag” -
computa eixos de rotação e ângulos, com saídas que
podem gerar rotações de formas
 CylinderSensor: também sensível às ações do tipo
“drag”, capaz de produzir também rotações das
formas, como, por exemplo, abrir uma porta, já que
possibilita definir um máximo e um mínimo
Exemplo de animação
 Este exemplo mostra um nome em animação,
disparado por um sensor de toque - a delimitação de
posições - inicial e final, se dá por meio do nó
OrientationInterpolator, associado ao disparo feito
pelo nó TouchSensor
 O nome pode ser arrastado, usando o nó
PlaneSensor, que com o movimento do mouse, leva
o mesmo para a posição que desejarmos na tela.
 Aqui, um texto é animado, mas, poderíamos fazer
isto com qualquer forma do meu cenário.
 Observe que as rotas de mudanças devem ser
expressamente declaradas.
#VRML V2.0 utf8
# Aqui um nome gira com o toque do mouse... basta pressionar o botão esq.
# do mouse para o movimento acontecer... Reparar na transparência do chão
# nas cores das letras e no toque.
Group {
children [
# Rotating Nome
DEF Nome Transform {
#translation -5.0 0.0 0.0
children [
Shape {
appearance DEF White Appearance {
material Material { }
}
geometry Text {
string ["Alexandre", "Cardoso"]
fontStyle DEF Fonte FontStyle{
size 0.9
style "BOLD"
family "SANS"
justify "MIDDLE" } } },
Shape { appearance Appearance { material Material {
diffuseColor 0.0 1.0 1.0
transparency 0.5 } }
geometry Box {
size 3.7 0.05 2.0 } } ] },
# Sensor
DEF Touch TouchSensor { },
DEF Arrasta PlaneSensor { },
# Animation clock
DEF Clock TimeSensor { cycleInterval 5.0
loop FALSE},
# Animation path
DEF CubePath OrientationInterpolator {
key [ 0.0, 0.50, 1.0 ]
keyValue [
0.0 1.0 0.0 0.0,
0.0 1.0 0.0 -3.14,
0.0 1.0 0.0 -6.28
]
}
]
}
ROUTE Touch.touchTime TO Clock.set_startTime
ROUTE Clock.fraction_changed TO CubePath.set_fraction
ROUTE CubePath.value_changed TO Nome.set_rotation
ROUTE Arrasta.translation_changed TO Nome.set_translation
Animações - animando formas com tempos
diferentes e mudando posições:
 É possível definir tempos diferentes para formas
diferentes, gerando aspectos de movimentos
diferenciados dentro do cenário
– ex5.wrl
 Uma forma de movimento de rotação, a partir de
movimentação do mouse é definida por
SphereSensor
– ex6.wrl
 é possível também utilizar múltiplos sensores,
situados em diferentes grupos - neste caso, a ação
que prevalece é a do sensor que está mais próximo
– ex7.wrl
Iluminação - efeitos importantes:
 VRML trabalha com diferentes formas de
fontes de luz: fontes puntuais, fontes
direcionais e fontes do tipo spot
 Nós básicos:
– PointLight
– DirectionalLight
– SpotLight
 Pode-se alterar as condições de atenuação
destas fontes, interação com a luz ambiente,
cor, posição, entre outros campos
 A boa associação destes nós produz efeitos
realísticos na cena.
 Exemplo: luz em cena:
 usando o nó PointLight, pode-se colocar uma fonte
de luz no centro de um dado conjunto de esferas,
gerando um efeito interessante
– luz1.wrl
 usando o nó SpotLight, um spot pode ser colocado -
este nó permite a definição do ângulo de abertura da
fonte de luz
– luz3.wrl
 usando o nó DirectionalLight, uma iluminação
direcional, vinda de uma posição muito distante, num
eixo previamente determinado, gera um efeito de
fonte de luz extensa, tal como o sol
– luz4.wrl
 Código do exemplo de iluminação - discussão:
#VRML V2.0 utf8

# este programa tem um conjunto de esferas, que com a aproximação do sensor


# é iluminado por luz azul esverdeada.
Group {
children [
DEF Luz SpotLight {
on FALSE
location 0.0 0.0 0.0
direction 1.0 0.0 0.0
color 0.0 1.0 1.0
ambientIntensity 0.80
radius 12.0
},
Inline {
url "spheres.wrl"
bboxCenter 0.0 0.0 0.0
bboxSize 16.0 16.0 1.0
},
DEF Toque TouchSensor { }
]
}

ROUTE Toque.isOver TO Luz.set_on


Elementos complementares: formas
geométricas
 As formas geométricas podem também serem
definidas por curvas suaves, conjuntos de faces
indexadas, grades de elevação, extrusões etc...
 Para prover tais formas, VRML dispõe dos seguintes
nós básicos:
– PointSet - para definir conjuntos de pontos
– IndexedFaceSet - para definir conjunto de faces indexadas,
muito útil para definições de superfícies específicas
– ElevationGrid - para gerar aspectos de terrenos, usando
grades constituídas por uma série de pontos em X e Z, tal
como um tabuleiro de xadrez e que podem ter uma dada
elevação
– Extrusion - para definir extrusões
 Exemplos - concebendo formas
geométricas mais complexas:

– gerando um cubo - linhas - modelo de arame,


usando o nó IndexedFaceSet:
– ex8.wrl
– gerando o mesmo cubo, mas, por um conjunto de
faces, definindo superfícies específicas para cada
uma das faces:
– ex9.wrl
– animando o cubo do exemplo anterior, podemos
ter uma forma que se movimenta, baseada em
faces que mudam de tamanho
– ex10.wrl
– Podemos elaborar o modelo de uma montanha,
usando o nó ElevationGrid - ainda não se
comenta aqui a texturização da cena:
– ex11.wrl
– A construção de superfícies mais suaves pode se
dar com a combinação de uma grade com
elevações positivas e negativas
– ex.12.wrl
– finalmente, para mostrar a concepção de um
medalhão, como uma forma pouco comum,
podemos usar uma associação de diversas
grades elevadas e unidas - aqui um total de 12
grades, como a anterior foram unidas:
– ex.13.wrl
Elementos complementares: Aparência:
 O nó appearance tem campos importantes
na definição da aparência final da forma e
que podem incluir a texturização da mesma:
– ex14.wrl
#VRML V2.0 utf8
# aqui, uma caixa recebe a textura de uma parede de tijolos:

Shape {
appearance Appearance {
material Material { }
texture ImageTexture {
url "brick.jpg"
}
textureTransform TextureTransform {
scale 3.0 3.0 }}
geometry Box { }}
 As texturas podem sofrer animação e dar
efeitos mais realísticos às formas
– ventilador.wrl
– ventilador2.wrl
 uma forma qualquer pode receber diferentes
texturas, criando formas 3D mais próximas
das formas naturais dos corpos
– latinha.wrl
#VRML V2.0 utf8
Group {
children [
# parte superior da lata - usa uma textura específica:
Shape {
appearance Appearance {
material Material { }
texture ImageTexture {
url "cantop.jpg"}}
geometry Cylinder {
bottom FALSE
side FALSE
height 2.7
}
}
# parte inferior da lata - usa outra textura:
Shape {
appearance Appearance {
material Material { }
texture ImageTexture {
url "canbot.jpg"
}
}
geometry Cylinder {
top FALSE
side FALSE
height 2.7
}
}
# envolvendo o cilindro com uma textura, temos a forma final da lata:
Shape {
appearance Appearance {
material Material { }
texture ImageTexture {
url "canlabel.jpg"
}
}
geometry Cylinder {
top FALSE
bottom FALSE
height 2.7
}
}
]
}

 O efeito é uma latinha com aparência bem


realística.
Elementos complementares: fundos

 A composição de cenas ganha mais realismo


com a adição de fundos - backgrounds
 Tais adições geram uma esfera infinitamente
larga, posta em torno do mundo
 o nó básico: Background
 exemplo
– estrela2.wrl
Elementos complementares: atmosfera
 A adição de atmosferas permite
– condições de simulação de dias nublados
– visibilidades diferenciadas
– alteração de cores da cena final
 O nó básico: Fog - neblina
Fog { color 1.0 1.0 1.0
visibilityRange 0.0 - distância do examinador
fogType “Linear”
set_bind - retirar ou colocar o efeito - eventIn
bind_changed }

atmosfera.wrl
Elementos complementares: sons
 A adição de sons é permitida de forma a criar
realismo a eventos ou a cenas em VRML.
 O nó básico é o nó Sound, onde pode ser
inserido um AudioClip, como um campo do
mesmo:
Sound{
....
source AudioClip {
loop TRUE
url “teste.wav”
}
Complementos: detalhamento
 É possível controlar o nível de detalhamento
das formas dentro do cenário, agrupando-as
no nó LOD
 Tal nível de detalhamento estará relacionado
com a distância dos objetos ao observador
 um carro, por exemplo, pode ser
representado por um cubo a 1000 unidades
de distância, dois cubos a 500 unidades de
distância e dois cubos e mais quatro esferas
a 200 unidades de distância
• lod2.wrl
Conclusões
 VRML é uma linguagem independente de
plataformas e que permite a criação de
cenários 3D interativos
 A linguagem tem algumas geometrias pré-
definidas e suporta transformações diversas
 VRML suporta bem elementos de multimídia,
tais como sons, filmes etc
 VRML é de fácil manuseio e seus arquivos
são da forma textual - geralmente pequenos
em relação ao efeito que produzem.

You might also like