Introdução

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ólidoObjeto 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“ “

image00

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.250

}

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

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://tom.di.uminho.pt/vrml/

http://www.sdsc.edu/vrml/

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

http://www.sdsc.edu/vrml