VRML
é uma Linguagem para Modelação de Realidade Virtual
usada para criar mundo de três dimensões. Trata-se de um formato
de arquivo objeto de 3D, análogo ao HTML (para objetos tridimensionais).
Usando-se formas pré-definidas e se especificando novas formas a
partir dessas, pode-se atribuir cor, forma, luz e outros a um documento
VRML.
Há
um tempo, surgiu a idéia de levar a Realidade Virtual para a internet.
Dessa idéia surgiu o VRML, que é a abreviação
de Virtual Reality Modeling Language. VRML é uma linguagem
independente de plataforma que permite a criação de ambientes
virtuais por onde se pode navegar, visualizar objetos por ângulos
diferentes e até interagir com eles. Hoje, graças ao crescente
investimento de grandes empresas, o VRML é o padrão
paradesenvolvimento de aplicações
de realidade virtual multi-usuário na internet. O objetivo
da linguagem é este mesmo: levar a realidade virtual para o usuário
comum, através da internet. Com o rápido avanço
datecnologia, os computadores pessoais
estão cada vez mais rápidos e poderosos, e isto faz com que
a realidade virtual deixe de ser objeto de estudo dos grandes centros de
pesquisa e possa ser utilizada por usuários comuns.
A
linguagem possui toda a estrutura necessária para o desenvolvimento
de aplicações de realidade virtual. A primeira versão
(VRML1.0), com exceção
de algumas extensões, não possibilita muita interação
do usuário com o mundo virtual, mas versões recentes acrescentam
características como animação, som, movimentos de
objetos e interação entre usuários. A última
versão é a 2.0, chamada Moving Worlds VRML 2.0. Por
serindependente de plataforma,
uma aplicação VRML roda em qualquermáquina
que tenha um browser VRML, ou seja, uma aplicação
que roda no PC, roda numa Silicon Graphics,numa
Sun,
etc. sem nenhuma alteração.
A
indústria do entretenimento é a que mais tem se beneficiado
com os recursos da RV. Muitas tecnologias também são
desenvolvidas partindo da necessidade que certos filmes têm em passar
para a tela as idéias no papel. Um exemplo é a empresa Industrial
Light & Magic de George Lucas que pretende num futuro próximo
desenvolver atores humanos virtuais mais realistas para interagir com atores
reais (como no filme pioneiro Roger Rabbit).
Na
World
Wide Web, a RV é usada principalmente em jogos interativos
criando ambientes em que o nível de realidade dos cenários
se aproxima do mundo real. Exemplos são os jogos MUD.
Sociedades
virtuais juntam em mesmo espaço humanos, avatares e objetos em 3D.
Servindo como foco de estudo para comportamento humano em casos concretos.
Mundos
em VRML são adotados por usuários que desejam interação
mais face a face. O Brasil Virtual é um exemplo onde criou-se uma
espécie de cidade tridimensional na qual habitantes podem construir,
comunicar-se e votar.
Na
medicina virtual, a RV possibilita construção de ambientes
tridimensionais para operações delicadíssimas a serem
efetuadas, sem prejuízo para o paciente. É a maneira de praticar
as aulas teóricas e ainda consultar a distância através
da telemedicina. O projeto ‘Homem Visível’ foi pioneiro ao mapear
todo o corpo humano montando uma gigantesca base de dados de imagens virtuais.
Este projeto foi desenvolvido pela Natinal Library Medicine (NLM),
a maior biblioteca médica do mundo e ponto de referência da
medicina mundial. O processo baseou-se em escanear e digitalizar cadáveres
perfeitos de ambos sexos - obtendo-se as imagens tomográficas de
ambos, cada corpo foi seccionado em fatias de 1 mm de espessura
e fotografado por câmara digital colorida de alta resolução.
No total 56 Gbytesde espaço
que constituem a 19 000 imagens produzidas. O primeiro projeto a utilizar
esta base de dados foi a Analyse da Clínica Mayo,
em Rochester, Estados Unidos. O software Analyse permite
uma viagem virtual pelo corpo humano.
A
Arquitetura e a Construção Civil ainda usarão a RVpara
que o usuário escolha e determine o ambiente em que vai morar. Mas
já é possível o cliente andar pela planta antes de
aprovar o projeto, tudo isso feito por simulações virtuais
como a Faculdade de Arquitetura de Utah. Nessa faculdade, criou-se
um modelo de hospital em VRML na
WEB,
onde se permite críticas e interação com o projeto.
Em
design
projetam-se roupas pelo MIT (Instituto de Tecnologia), esta é
a função do Wearable computer. O MITtambém
desenvolveu Photo Book, um amplo banco de dados de faces onde pode-se
procurar rostos conhecidos entre os disponíveis no sistema - particularmente
útil para a polícia, jornalistas, etc. O software
é capaz de notar pequenas mudanças no rosto (na faceouum
corte de cabelo).
Histórico
de VRML
VRMLfoi
exposto na primavera de 1994 na Primeira Conferência de World
Wide Web anual, rmGenebra- Suíca.
Tim
Berners-Lee e Dave Raggett organizaram uma sessao de Birds-of-a-Feather
- Penas de um Pássaro - (BOF) para discutir interfaces de VR para
a World Wide Web. Vários freqüentadores das discussões
descreveram projetos ainda em planejamento para construir ferramentas de
visualização gráfica para 3D que interagissem com
a Web. Todos concordaram com a necessidade dessas ferramentas para
ter uma linguagem comum de especificação de descrição
de cenários 3De hiperlinksWWW
- um análogo ao HTML para VR. O termo VRML
foi forjado, e o grupo resolver começar com especificações
de trabalho depoisda conferência.
A palavra MarkUp foi posteriormente modificada para Modelação
para refletir a natureza gráfica do VRML.
Logo
após a Genebra, as listas de discussão www-vrml foram
criadas para o desenvolvimento de uma especificação para
a primeira versão de VRML. A adesão foi excepcional:
após uma semana havia mais de mil membros. Após se estabelecer,Mark
Pesce do Labyrinth Group anunciou que desejava aprontar um esboço
da especificação para a Conferência de Outono de WWW
de 1994, em apenas 5 meses. Era um calendário muito difícil:
mas a primeira versão não era muito ambiciosa e o VRML
poderia ser adaptado de uma solução existente. A lista rapidamente
acatou que um grupo de regras para a primeira versão, e começou
a procurar por tecnologias compatíveis com as necessidades do
VRML.
A
procura por tecnologias existentes envolveu vários tipo de candidatos
no mundo. Depois de muito deliberar a lista chegou a um consenso: o Open
Inventor ASCII File Format da Silicon Graphics Inc. O
Inventor
File Format suportava descrições completas de cenários
de 3D com polígonos representando objetos, iluminação,
materiais, propriedades de ambientes e efeitos realistas. Umsubconjunto
do Inventor File Format, com extensões com suportes para redes,
formas para base de VRML.
Gavin
Bell da
Silicon Graphics adaptou para a lista de mail o Inventor
File Format para VRML, com design de acordo com lista
de discussão. SGI tem publicidade estabelecida que o formato de
arquivo está disponível para uso do mercado aberto, e tem
contribuído para um parser de formato de arquivo num domínio
público para bootstrap(mecanismo
de boot) para desenvolvimento de visualizador de VRML.
Aplicações
A
realidade virtual é forma de interface mais natural entre o computador
e o ser humano. Por isso, o número de aplicações é
muito grande, em diversas áreas do conhecimento. A seguir estão
alguns exemplos deaplicação
: na área de visualização de dados, podemos usar o
VRML
para criar gráficos tridimensionais, porexemplo.
É fácil visualizar os números de umgráfico
3D. Fica mais fácil ainda quando podemosvisualizar
este gráfico por vários ângulos diferentes. Veja um
exemplo desta aplicação: CAD - VRML permite
que o projetista ou desenhista vejaseu
modelo CAD em um ambiente 3D virtual interativo, podendo manipular
e visualizar omodelo de forma livre.
Ou seja, o projetista pode acompanhar o desenvolvimento do projeto usando
VRML
para visualizar seu modelo em três dimensões.
Passos
Básicos
É
uma linguagem interpretada composta por nó, campo e comentário.
Usa-se
: #VRML V1.0 asciipara que o interpretador
reconheça este documento como VRML (*.wrl).
*
Nó: comando que define formas e propriedades em VRML .
Ex.
de Primitivas: cubo, esfera, cilindro e cone,
=>
Transform
(move, dimensiona e rotaciona objeto)
=>
AsciiText
(define texto ascii a ser mostrados)
=>
GroupindNodes
(agrupa informações juntas - para reuso)
*
Campo: atributos que os nós tem.
Ex.:
Um cubo é descrito pelas propriedades LARGURA, ALTURA e PROFUNDIDADE.
*
Comentário: " # " precede todo comentário. Um comentário
pode ser feito em qualquer posição na linha.
O
ESPAÇO
Todas
coordenadas em VRML são expressas em X,Y,Z. O eixo X representa
o eixo horizontal do monitor, o eixo Y vertical e o eixo Z,entra
e sai.
Medidas
lineares são em metros e angulares, em radianos.
Um
forma criada é a princípio vazia, oca, sem cor e tem origem
(0,0,0). Por isso, esses atributos devem ser modificados conforme a conveniência.
Por exemplo, ao se representar-se um quarto, é conveniente que seja
uma forma oca. É possível especificar iluminação
dentro de uma forma (PointLight).
Os
nós são basicamente quatro: cubo, esfera, cilindro, cone.
E exceto, pelo cubo, os outros nós são formas triviais.
O
CUBO
Constitui
uma forma de 6 faces e pode dispensar altura, largura e profundidade equivalentes.
#VRML
V1.0 ascii
/*
A sintaxepara construção
de um cubo : */
Cube
{
width2
height2
depth2
}
/*
no lugar de 2 deve haver sempre um número real qualquer */
GRÁFICOS
3D
É
necessário alguma familiaridade com internet e
HTML.Para
isso, exemplificaremos instruções básicas para a criação
de mundos VRML. Usaremos um editor de texto ascii e o
browser de VRMLLive3D.
Eventualmente pode-se acrescentar textura aos arquivos de imagem criados.
Há
três elementos neste contexto: o observador, o objeto e a luz.
Um
objeto mais complexo pode ser definido nas três coordenadas: X, Y
e Z. E pode-se atribuir certas propriedades como:
*
material: como o objeto interage com a luz.
*translation:
tradicionalmente é identificado como centro do objeto, modificando
esta propriedade, modifica-se o centro do objeto (metros).
*
rotation:
muda a orientação de um objeto em cena (radianos).
*
scaling:
muda a dimensão dos objetos.
*
lighting:
aplica luz a cena.
*
texture
mapping: aplica imagem a superfície de um objeto.
Gráficos
3D definem espaços tridimensionais, como o sistema de três
eixos:
*
X, que correspondea largura;
*
Y, a altura;
*
Z , a profundidade.
Eixos
XYZ
Assumindo
um ponto no centro, a discrição de objetos em espaço
tridimensional é expresso com as coordenadas representando com pontos
absolutos num sistemas de coordenadas tridimensionais relativos ao ponto
central.
Cada
eixo tem direção positiva e negativa entendendo-seo
ponto central como cenário. VRML padroniza o eixo Y positivo
aponta para cima, o eixo X positivo aponta para a direita e o eixo Z aponta
direto para o usuário. Objetos com cenário podem ser rotacionados,
provocando a orientação dos seus eixos mudem de acordo.
Uma
vez que a locação do objeto é estabelecida, relativa
ao centro absoluto, pode ser orientada em uma ou mais de três direções:
*
Yaw:
rotação sobre o eixo Y;
Yaw,
Rotação Y
*
Pitch:
rotação sobre o eixo X;
Pitch,
Rotação X
*
Roll:
rotação sobre o eixo Z.
Roll,
Rotação
Z
Os
três eixos (X,Y,Z) e as três rotações (Yaw,
Pitch,
Roll) juntos, são referenciados como seis graus de liberdade.
O referencial e a orientação de objetos em espaço
tridimensional são determinados por estas seis informações.
COMO
OS COMPUTADORES REPRESENTAM OBJETOS 3D
Quando
um objeto gráfico tridimensional é criado, um conjunto de
pontos normalmente costuma representar a forma. Desde que é difícil
ver a forma de um objeto claramentequando
somente alguns pontos são designados, este conjunto é chamado
Point
Cloud - Nuvem de Pontos. Os pontos, então, são ligados
por linhas para formar uma malha (mesh ou wireframe). O wireframe
mostra nitidamente um grupo de polígonos (tipicamente triângulos,
desde que possam ser rapidamentegerados).
É importante lembrar que polígonos são tipicamente
lados ou faces. Uma face de polígono é o lado da qual
sua normal (um raio de luz atravessa o polígono no ângulo
reto) distancia-se do polígono. Assim, os polígonos são
visíveis de fora e invisíveis por dentro.
Nuvem
de Pontos
Malha
(Wireframe)
Uma
vez que os polígono foram criados, o computador pode então
escurecer polígonos individuais para produzir a aparência
de um objetos sólido. Opcionalmente o computador acresce a textura
ao objeto. Texturizar torna possível criar rapidamente objetos de
superfícies bastante complexas.
Objeto
Sólido
Objeto
Texturizado
CRIANDO
MUNDOS VRML: TÉCNICAS PADRÕES
Descrição
de Cenário e Parsers
VRML
é uma linguagem de descrição de cenários. Embora
seja um linguagem computacional, não é uma linguagem de programação.
Arquivos VRML não são compilados, mas apenas arquivos
texto asciique podem ser
parsed
por um interpretador VRML. Os Parsers (programas interpretadores)
são conhecidos também como browsers VRML . Se você
já escreveu documentos HTML, então é conveniente
trabalhar num browser HTML para ver os resultados desde trabalho.
O mesmo acontece para VRML:
escreve-se o código no editor de texto asciii , salva
o arquivo e se vê o cenário ou mundo VRML
com o browser VRML.
Sendo
o código VRML interpretado, os resultados visíveis
do código variam de um browser
para o outro. Além
do mais, VRML é
extendível, isto é, que desenvolvedores do browser
podem
adicionar funcionalidades não padrão à linguagem.
Cenário
Gráfico e Nós
Um
browserVRMLdeve
reconhecer um arquivo como código VRML para
interpretá-lo (Parser). Este é acoplado com um simples
cabeçalho string no
início do arquivo:
#VRMLV1.0
ascii
Este
cabeçalho deve estar na primeira linha do arquivo VRMLpara
ser interpretado corretamente. Note que em muitos casos o símbolo
‘ # ‘ indica comentário, exceto aqui.
Os
objetos em um arquivo VRMLsão
chamados nós ou nodos. Quando organizados hierarquicamente, os nós
compõe um cenário gráfico. Cada mundo VRML , por
mais simples que seja, é um cenário gráfico. Os nós
são de três tipos:
*
nós de forma: descreve geometria real;
*
nós de propriedade: que modifica geometria;
*
nós de grupo: podendo modificar um grupo de objetos como se fosse
apenas um objeto.
O
efeito cumulativo dos nós em um cenário gráfico é
chamado estado (state).
Para
muitos propósitos o nodo mais importante de grupo é o node
Separator, cujo uso é:
Separator{
outros
nós aqui
}
O
nó separador (Separator) mantém encerrados os efeitos
de modificação dapropriedade
dos nós com ele. Assim, somente nós com separador podem ser
modificados por propriedades de nós com o mesmo separador; nós
fora daquele separador nãoserão
afetados por aquelas propriedades de nós.
Unidades
de Medida
VRMLassume
os seguintes valores para unidades de mensuramento:
*
distância e tamanho: metro (m);
*
ângulo: radianos;
*
outros valores: porcentagem (expressa em frações de 1).
Material
A
propriedade material para qualquer forma pode ser especificada comoNó
Material, cujo uso é:
#VRMLV1.0
ascii
Separator{
Material{
ambientColor0.20.20.2
diffuseColor0.80.80.8
specularColor000
emissiveColor000
shininess0.2
transparency0
}
}
Cada
documento de nó Material que especifica um tipo de cor usa valores
RGB
(Intensidades Red, Green and Blue), o valor vermelho é o
mais esquerdo, o valor verde é central e o azul é o valor
mais da direita. Teoricamente, qualquer cor (nuança, saturação,
valor) podem ser criados combinando vermelho, verde e azul em diferentes
intensidades.
Deseja-se
uma esfera azul. Usam-se alguns componentes básicos do VRML:
cabeçalho, Separator,
Material, Sphere. Vai-se
criar um arquivo VRML quequando
traduzido por um browser VRML ,será
descrito um mundo VRMLque
contém uma esfera azul:
#VRMLV1.0
ascii
Separator{
Material{
emissiveColor001
}
Sphere{
}
}
Esfera
Azul
Note
que o argumento radius (radianos) nãofoi
usado no nó sphere. Logo foi assumido um valor padrão.
Textura
Qualquer
forma pode ter a textura aplicada na sua superfície. A textura pode
vir de um arquivo externo de imagem para um arquivo mundo VRMLou
especificado com o arquivo mundo como uma série de coordenadas.
Exemplo: usaremos arquivos imagem, desde que seja a maneira mais fácil
para envolver rapidamente a forma de um objeto VRMLnuma
textura. Uma textura de um arquivo de imagem pode ser aplicada a uma forma
como nó Texture2:
#VRMLV1.0
ascii
Separator{
Texture2{
filename“
“
image000
wrapSREPEAT
wrapTREPEAT
}
}
Para
nossos propósitos, somente o argumento filename será
usado nesses exemplos.
Vamos
dizer que queremos fazer uma tora de pedra. Usando somente os componentes:
cabeçalho, Separator, Texture2, Cube. Vamos
criar um arquivo VRML
, que quando interpretado descreve o mundo
VRML
um objeto assemelhado a uma tora de pedra .
#VRMLV1.0
ascii
Separator{
Texture2{
filename“stone.jpg”
}
Cube{
width1
height2
depth0.15
}
}
Cubo
Texturizado (Stone Slab)
Transformações
Por
default,
objetos num cenário VRML :
*
tem como local do centro, o centro do cenário;
*
tem como orientação, a orientação padrão
do cenário;
*
tem como dimensões, as primitivas, isto é, as dimensões
especificadas.
Exceto
quando é necessário modificar alguns dessas convenções
para um objeto, uma ou mais transformações serão usadas.
Os nodos de transformações são um tipo de nó
propriedade.
Termos
especiais costumam descrever as funções executadas pelos
nós de transformação são:
*
translate:
muda a locação do centro do objeto;
*
rotate:
muda a orientação dos eixos do objeto;
*
scale:
muda dimensões do objeto.
O
nó Transform contém
todas as funções de transformações mencionadas
acima. Exemplo:
#VRMLV1.0
ascii
Separator{
Transform{
translation000
rotation0010
scaleFactor111
scaleOrientation0010
center000
}
}
Para
o propósito de simplicidade e melhor esclarecimento o relacionamento
de hierárquico de nós no cenário VRML , três
outros nós de transformação, que executam somente
um tipo de transformação cada, serão usadas nesses
exemplos. Os nós sãoTranslation,
Rotation
e Scale.
O
nó Translation como um objeto de um ou mais de três
eixos. Seu uso é:
#VRMLV1.0
ascii
Separator{
Transform{
translation000
}
}
Digamos
que se queira incluir uma esfera vermelha num mundo já existente
que contém uma esfera azul. Usando os nós VRML , podemos
criar um mundo VRMLque contenha
ambas. Entretanto, por convenção, ambas esferas serão
colocadas no centro exato do cenário. Por isso, usaremos nó
Translation
para transformar o local de uma das esferas, a azul, situando-as lado a
lado. Exemplo:
#VRMLV1.0
ascii
Separator{
Separator{#esfera
vermelha,default é
o centro do cenário
Material{
emissiveColor100
}
Sphere{
}
}
Separator{#esfera
azul,deslocada pelo eixo X positivo
Translation{
translation2.2500
}
Material{
emissiveColor001
}
Sphere{
}
}
}
Esfera
Vermelha e Esfera Azul Deslocada
Note
que cada nodo Sphere foi situada com um diferente nodo Separator
com as propriedades que influenciam cada uma. Assim os efeitos de cada
nós de propriedade (Material, Translation, nesse exemplo)
para que cada uma somente afete os nós de forma (por exemplo: Sphere)
cujas propriedades desejamosmodificar.
Note que o Separator contém todos os outros nós do
cenário gráfico. Embora nãoseja
obrigatório, é aconselhável usar “ Separator
Cenário “ em cada cenário gráfico.
O
nó Rotation pode rotacionar um objeto em um ou mais de três
eixos, mas é usado normalmente para fazer rotação
somente de um eixo por vez. O nó Rotation afeta a orientação:
#VRMLV1.0
ascii
Separator{
Rotation
{
rotation0010
}
}
Digamos
que se deseja um mundo com dois cones, um sobre o outro, um apontando para
cima e um para o lado. Usando nós de propriedade de VRML e
o nó de forma Cone, poderemos criar um mundo VRML que
contém um cone marrom e um azul, um sobre o outro. Entretanto, por
convenção, ambos cones devem apontar para cima. Portanto,
usaremos o nó Rotation para mudar a orientação
de um dos cones, o azul, inclinando-o 90°
para o lado.
#VRML
V1.0 ascii
Separator
{
Separator
{ # brown cone, translated along the negative Y axis
Translation
{
translation
0 -2 0
}
Material
{
emissiveColor1
0.6 0.44
}
Cone
{
height2
bottomRadius0.5
}
}
Separator
{ # blue cone, rotated 90 degrees on the Z axis
Rotation
{
rotation0
0 11.57
}
Material
{
emissiveColor0.4
0 1
}
Cone
{
height2
bottomRadius0.5
}
}
}
Cone
Marrom e Cone Azul Rotacionado
Nó
Scale
atribui escala ao objeto ao longo de um ou mais dos seus três eixos.
#VRML
V1.0 ascii
Separator
{
Scale
{
scaleFactor
1 1 1
}
}
Este
nó pode criar uma versão das esferas em que pode se ver as
duas sem que uma comprima a outra.
#VRML
V1.0 ascii
Separator
{
Separator
{ # red sphere
Material
{
emissiveColor1
0 0
}
Sphere
{}
}
Separator
{ # blue sphere, scaled down on the X and Z axes
Translation
{
translation
2.25 0 0
}
Scale
{
scaleFactor
0.6 1 0.6
}
Material
{
emissiveColor0
0 1
}
Sphere
{}
}
}
Esfera
Vermelha e Esfera Azul Escalada
O
nó Scale foi situado após o nó Translation
com o Separator da esfera azul. O estado do cenário varia
de acordo com a ordem dos seus nós, o efeito de “ Scale,
Translation
”
é diferente de “ Translation, Scale “.
Instancialização
Uma
maneira de reduzir o número de nós que são usados
no arquivo mundo que descreve muitas formas, é reutilizar definições
de objetos em cenários. Esse processo é a instancialização.
As sentençasDEF e
USE
permitemo processo:
#VRML
V1.0 ascii
Separator
{
DEF
name
shape
node
or
DEF
name
Material
{}
or
DEF
name
Separator
{
grouping,
property and shape nodes
}
Separator
{
USE
name
}
}
Exemplo
do siri no fundo do mar, com partes instanciadas:
#VRML
V1.0 ascii
Separator
{
Separator
{ # viewpoints
DEF
Cameras Switch {
whichChild0
DEF
"Crab!" PerspectiveCamera {
position0
0 7
}
}
}
Separator
{
Rotation
{
rotation
0 1 01.57
}
Separator
{ # body
Scale
{
scaleFactor
1 0.3 1
}
Material
{
diffuseColor0.8
0.8 1
}
DEF
Ball
Sphere
{
radius
2
}
}
DEF
3Legs
Separator
{ # 3 legs 1
DEF
Leg
Separator
{ # leg 1
Material
{
diffuseColor1
0.3 0.3
}
Separator
{ # upper leg
Translation
{
translation
0 0.55 2.3
}
Rotation
{
rotation1
0 00.9
}
DEF
LegSegment
Cylinder
{
height2
radius0.13
}
}
Separator
{ # joint
Translation
{
translation
0 1.26 3.15
}
Scale
{
scaleFactor
0.095 0.095 0.095
}
USE
Ball
}
Separator
{ # lower leg
Translation
{
translation
0 0.7 3.85
}
Rotation
{
rotation1
0 0-0.9
}
Scale
{
scaleFactor
0.8 0.8 0.8
}
USE
LegSegment
}
}
Separator
{ # leg 2
Translation
{
translation
0.62 0.2 -0.2
}
Rotation
{
rotation0
1 00.65
}
USE
Leg
}
Separator
{ # leg 3
Translation
{
translation
-0.62 0.2 -0.2
}
Rotation
{
rotation0
1 0-0.65
}
USE
Leg
}
}
Separator
{ # 3 legs 2
Rotation
{
rotation0
1 03.14
}
USE
3Legs
}
DEF
Eye
Separator
{ # eye 1
Material
{
diffuseColor1
1 1
Translation
{
translation
-1.95 0 -0.45
}
Rotation
{
rotation0
0 1-1.9
}
Cone
{ # eyeball
height0.4
bottomRadius0.2
}
Material
{
diffuseColor0
0 0
}
Translation
{
translation
0 -0.015 0
}
Cone
{ # iris
partsBOTTOM
height0.4
bottomRadius0.1
}
}
Separator
{ # eye 2
Translation
{
translation
0 0 0.9
}
USE
Eye
}
}
}
Siri
no Fundo do Mar com Partes Instanciadas
Inlines
É
uma outra forma de instanciar objetos. Esta forma é acoplada com
o nó WWWInline :
#VRML
V1.0 ascii
Separator
{
WWWInline
{
name""
bboxSize0
0 0
bboxCenter0
0 0
}
}
O
campo Name é o caminho do arquivo World a ser usado.
Os campos bboxSize e bboxCenter opcionalmente descrevem caixa
limitada (bounding box), que é dados ao usuário
como indicativo da locação do objeto e tamanho antes de ser
interpretado. Caixas limitadas podem ser bastante úteis para a construção
de mundos muito grandes ou muito complexos.
Iluminação
É
possível também prover iluminação para os mundos
VRML.
Caso nãose especifique as
propriedades referentes a iluminação, o mundo VRML assume
o padrão do browser de VRML .
Para
isso usa-se nós de iluminação, isto é, para
criar fonte de iluminação. Basicamente dependendo da sua
posição no cenário gráfico e tipo, nós
de iluminação afetam outras formas no cenário e podem
ser transformadas. Como outros nós de propriedade se um nó
de iluminação está num Separator nãoafetará
formas externas a este Separator.
Os
nós de iluminação de VRML são:
DirectionalLight,
PointLight
e SpotLight.
O
nó DirectionalLight cria uma fonte de iluminação
que afeta a todas formas na direção especificada:
DirectionalLight
{
onTRUE
intensity1
color111
direction0
0-1
}
Alguns
browsersVRMLassumem
uma luz de centro por convenção, que brilha no cenário,
ao longo do eixo Z negativo. Definiremos fonte de luz para iluminar o eixo
X:
#VRML
V1.0 ascii
Separator
{
DirectionalLight
{
onTRUE
intensity0.4
direction-1
0 0
}
DirectionalLight
{
onTRUE
intensity0.4
direction1
0 0
}
Separator
{ # brown cone, translated along the negative Y axis
Translation
{
translation
0 -2 0
}
Material
{
emissiveColor1
0.6 0.44
}
Cone
{
height2
bottomRadius0.5
}
}
Separator
{ # blue cone, rotated 90 degrees on the Z axis
Rotation
{
rotation0
0 11.57
}
Material
{
emissiveColor0.4
0 1
}
Cone
{
height2
bottomRadius0.5
}
}
}
Dois
Cones Iluminados
Cameras
(Pontos de Vista)
Um
ponto de vista (viewpoint) é a posição exata
da qual o mundo VRML é
visto: é definida no cenário gráfico do arquivo world
. Nos exemplos anteriores o viewpoint padrão, também
conhecido como entry view , foi o único considerado.
O entry view é a posição da qual vemos
o cenário quando o mundo VRML é representado no browser,
se nenhum outro ponto de vista foi definido no mundo.
Para
ver os exemplos anteriores de novos pontos de vista, é necessário
navegar manualmente para aquela posição. O que se faz para
o usuário ver um mundo VRML de
uma posição especial, além da padrão, assim
que o cenário é carregado o primeiro momento?
VRML nós
camera
para definir posições exatas para visualizar um cenário.
Além da dificuldade de precisá-lo, nós
camera
podem ser vistos como nós propriedade (propertynodes), desde
que:
1.
eles pareçam transformar as formas em um cenário;
2.
alguns dos seus parâmetros, comportando-se como lentes de efeitos
especiais, criem a ilusão de distanciamento das formas, mesmo depois
do usuário ter-se afastado da posição da camera.
Dois
nós camera, PerspectiveCamera e OrthographicCamera
, são definidos em VRML . Mas apenas o PerspectiveCamera
é normalmente suportado por browsers VRML :
#VRML
V1.0 ascii
Separator
{
PerspectiveCamera
{
position001
orientation0010
focalDistance5
heightAngle0.785398
}
}
Usa-se
o nó de agrupamento Switchpara
melhor definirmos múltiplos viewpoints:
#VRML
V1.0 ascii
Separator
{
Switch
{
whichChild-1
}
}
Usando
o exemplo do siri no fundo do mar (deep sea crab), demonstramos
nós WWWInline,
PerspectiveCamera e Switch:
#VRML
V1.0 ascii
Separator
{
Separator
{ # viewpoints
DEF
Cameras Switch {
whichChild0
DEF
"Front" PerspectiveCamera {
position0
0 7
}
DEF
"Back" PerspectiveCamera {
position0
0 -7
orientation
0 1 03.14
}
DEF
"Side" PerspectiveCamera {
position7
0 0
orientation
0 1 01.57
}
DEF
"Top" PerspectiveCamera {
position0
10 0
orientation
1 0 0-1.57
}
DEF
"Bottom" PerspectiveCamera {
position0
-10 0
orientation
1 0 01.57
}
}
}
Separator
{ # crab
WWWInline
{
name
"1crab1.wrl"
}
}
}
Siri
no Fundo do Mar com Ponto de Vista
Nível
de Detalhes
#VRML
V1.0 ascii
LOD
{
range[
]
center0
0 0
}
Usando
três nodos forma primitiva, instancialização e o nó
LOD,
será possiível definir três níveis de detalhe,
contendo um grupo de formas primitivas, cada grupo contendo uma cor diferente:
#VRML
V1.0 ascii
Separator
{
PerspectiveCamera
{
position
0 0 102
}
DirectionalLight
{
onTRUE
intensity0.7
direction0
0 -1
}
LOD
{ # level-of-detail
range[
50,70 ]
Separator
{ # third level, red
Material
{
emissiveColor1
0 0
}
DEF
ObjectSet
Separator
{
Separator
{ # Cube
Translation
{
translation
-2 0 0
}
Cube
{
width1
height1
depth1
}
}
# end of Cube Separator
Separator
{ # Cone
Translation
{
translation
0 -2 0
}
Cone
{
height1.5
bottomRadius0.5
}
}
# end of Cone Separator
Separator
{ # Cylinder
Translation
{
translation
2 0 0
}
Cylinder
{
height1.5
radius0.65
}
}
# end of Cylinder Separator
}
# end of ObjectSet definition Separator
Translation
{
translation
0 0 25
}
Rotation
{
rotation0
1 10.4
}
Rotation
{
rotation0
1 03.14
}
USE
ObjectSet
}
# end of third level Separator
Separator
{ # second level, green
Translation
{
translation
0 0 50
}
Material
{
emissiveColor0
1 0
}
USE
ObjectSet
Translation
{
translation
0 0 10
}
Rotation
{
rotation0
1 10.4
}
Rotation
{
rotation0
1 03.14
}
USE
ObjectSet
}
# end of second level Separator
Separator
{ # first level, blue
Translation
{
translation
0 0 70
}
Material
{
emissiveColor0
0 1
}
USE
ObjectSet
Translation
{
translation
0 0 25
}
Rotation
{
rotation0
1 10.4
}
Rotation
{
rotation0
1 03.14
}
USE
ObjectSet
}
# end of first level Separator
}#
end of level-of-detail
}
Primitivas
com Nível de Detalhes
CRIANDO
MUNDOS VRML
Cores
de Fundo
Live3D
permite definir cor para fundos de mundos VRML , com extensão
BackgroundColor
do Live3D de VRML :
DEF
BackgroundColor Info {
string
""
}
Criaremos
uma versão do siri no fundo do mar (Deep Sea Crab) que tenta
mostra-se no oceano. Criando um mundo que importa (por Inlines)
o modelo do siri e usando o nó BackgroundColor, um siri será
mostrado no campo azul esverdeado:
#VRML
V1.0 ascii
Separator
{
DEF
BackgroundColor Info {
string
"0.15 0.6 0.7"
}
Separator
{ # viewpoints
DEF
Cameras Switch {
whichChild0
DEF
"Crab!" PerspectiveCamera {
position0
0 7
}
}
}
Separator
{ # crab
WWWInline
{
name
"1crab1.wrl"
}
}
}
Siri
no Fundo do Mar com Cor de Fundo
Imagem
de Fundo
Live3D
permite usar imagens para fundos nos mundos VRML . Extensões
BackgroundImage
VRML possibilitam isso:
DEF
BackgroundImage Info {
string
""
}
Para
criar uma versão mais realista do siri no fundo do mar tenta se
mostrar no oceano, modifica-se exemplo usado para rever o nó BackgroundColor
substituindo o nó BackgroundImage no Live3D. Assim
dá-se a impressão da vibração da água
do mar atrás do modelo do siri:
#VRML
V1.0 ascii
Separator
{
DEF
BackgroundImage Info {
string
"bakimage.jpg"
}
Separator
{ # viewpoints
DEF
Cameras Switch {
whichChild0
DEF
"Crab!" PerspectiveCamera {
position0
0 7
}
}
}
Separator
{ # crab
WWWInline
{
name
"1crab1.wrl"
}
}
}
Siri
no Fundo do Mar com Imagem de Fundo
Referências
Bibliográficas
http://www.netscape.com/eng/live3d/howto/vrml_primer_index.html
http://apertos0.csc.uvic.ca/~brycerw/vrml_tutorial/tutframe.htm
http://www-ipf.bau-verm.uni-karlsruhe.de/Personen/landes/book.html
http://www.dc.ufscar.br/~grv/vrml/tutoriais/vrml10/#IntroduþÒo
http://www.eecs.tulane.edu/www/Benetz/mainpage.html
http://www.ezinfo.ethz.ch/general_info/WWW5/tutorial_2.html
http://www.sdsc.edu/vrml/cgi-bin/display.cgi?category=Tutorials+-+VRML
http://www.iwebmasters.com/HTML%20Links.html