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
ROUTE
ROUTE
ROUTE
Touch.touchTime
TO Clock.set_startTime
Clock.fraction_changed TO CubePath.set_fraction
CubePath.value_changed TO Nome.set_rotation
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.
Download

baixe aqui - Alexandre Cardoso, Dr.