Introdução à VRML 2.0 (Profa. Isabel Harb Manssour) |
3. Construindo e Agrupando Shapes Pré-DefinidosO VRML possui algumas figuras pré-definidas, que são o cubo, o cone, o cilindro e a esfera, para construção do "mundo" VRML. Estas figuras são chamadas de figuras ou formas primitivas, ou simplesmente primitivas. Alterando estas figuras, isto é, trocando o valor de suas coordenadas (como, por exemplo, para "esticá-la" ou "achatá-la"), rotacionando-as ou agrupando-as, pode-se criar uma série de objetos. Como já comentado, um shape VRML possui geometria e aparência, que são definidas no nó Shape. A aparência é descrita pelos nós Appearance e Material, que serão descritos posteriormente. As primitivas de geometria oferecidas no "mundo" VRML, e que podem ser usadas com o nó Shape para construir shapes primitivos, incluem: cubo, cone, cilindro e esfera. Cada nó de geometria primitiva possui um ou mais campos que permitem especificar atributos como as dimensões do cubo, o raio da esfera ou a altura do cilindro e do cone. As primitivas são sempre construídas centralizadas na origem, e são consideradas como sólidos. O nó Shape, usado para construção de todos os shapes VRML, tem a seguinte sintaxe: Shape{ appearance NULL # SFNode geometry NULL # SFNode } O valor do campo geometry especifica um nó que define a forma 3D, ou geometria, do shape. Valores para este campo, tipicamente, incluem os nós Box, Cone, Cylinder e Sphere. O valor default NULL indica a falta de geometria. Já o valor do campo appearance especifica um nó que define a aparência do shape, incluindo sua cor e textura. Valores para este campo incluem o nó Appearance e o valor default NULL, que faz com que o objeto fique com uma cor branca. A sintaxe do nó Appearance, usado no campo appearance do nó Shape descrito acima, é: Appearance { material NULL # SFNode texture NULL # SFNode textureTransform NULL # SFNode } Neste caso, o valor do campo material especifica um nó que define os atributos do material. Normalmente é utilizado o nó Material neste campo. O valor default NULL, determina um material branco. Os outros campos serão descritos posteriormente. O nó Material, que por sua vez especifica os atributos do material que compõe o objeto, possui a sintaxe descrita a seguir. Os valores default para os campos deste nó, que serão detalhadamente descritos mais adiante, cria um shape branco com "sombras". Material { ambientIntensity 0.2 # SFFloat diffuseColor 0.8 0.8 0.8 # SFColor emissiveColor 0.0 0.0 0.0 # SFColor shininess 0.2 # SFFloat specularColor 0.0 0.0 0.0 # SFColor transparency 0.0 # SFFloat } O cubo, ou caixa, é criado através do nó Box e pode ser usado como valor do campo geometry no nó Shape. A sintaxe deste nó é a seguinte. Box { size 2.0 2.0 2.0 # SFVec3f } O valor do campo size especifica o tamanho de uma caixa retangular tridimensional centrada na origem. O primeiro valor deste campo corresponde à largura da caixa na direção do eixo X, o segundo valor corresponde à altura na direção Y e terceiro valor corresponde à profundidade na direção Z. Todos estes três valores devem ser maior do que 0.0. Os valores de tamanho de campo default são 2.0. Para ilustrar, o exemplo abaixo descreve a criação do cubo que aparece na figura 3.1. #VRML V2.0 utf8 # Desenho de um cubo vermelho Shape { appearance Appearance { material Material { diffuseColor 1.0 0.0 0.0 } } geometry Box { size 2.5 2.5 2.5 } } Figura 3.1 Exemplo da criação de um cubo vermelho De forma análoga ao nó Box, o nó Cone é usado para criar um cone. Os valores default para cada um dos campos deste nó são os apresentados na sintaxe descrita a seguir. Neste nó, o valor do campo bottomRadius, que deve ser maior do que 0.0, especifica o raio da base de um cone tridimensional centrado na origem cujo eixo cresce em direção ao eixo Y (o eixo de um cone corresponde a uma linha imaginária que vai do centro da base até o topo do cone). Cone { bottomRadius 1.0 # SFFloat height 2.0 # SFFloat side TRUE # SFBool bottom TRUE # SFBool } O valor do campo height, que também deve ser maior do que 0.0, especifica a altura do cone na direção do eixo Y. O valor do campo side especifica quando ou não os lados do cone devem ser construídos. Se o valor for TRUE eles devem aparecer, se for FALSE não. Da mesma foram, o valor do campo bottom especifica quando o círculo da base deve ser construído ou não. O próximo exemplo mostra o código para a criação do cone da figura 3.2. #VRML V2.0 utf8 # Desenho de um cone amarelo Shape { appearance Appearance { material Material { diffuseColor 1.0 1.0 0.0 } } geometry Cone { bottomRadius 1.0 height 5.0 side TRUE bottom TRUE } } Figura 3.2 Exemplo da criação de um cone amarelo A sintaxe do nó Cylinder, usado para criar um cilindro, com os valores default para seus campos é a seguinte: Cylinder { radius 1.0 # SFFloat height 2.0 # SFFloat side TRUE # SFBool top TRUE # SFBool bottom TRUE # SFBool } Neste caso, o valor do campo radius especifica o raio do cilindro que é centrado na origem, e o valor do campo height especifica a sua altura. Ambos os valores devem ser maior do que 0.0. Assim como no nó Cone, os valores dos campos side, top e bottom determinam, respectivamente, se os lados, o topo e a base do cilindro vão ser desenhados ou não. O código que exemplifica a criação de um cilindro, com a sua respectiva visualização na figura 3.3, é apresentado a seguir. #VRML V2.0 utf8 # Desenho de um cilindro cyan Shape { appearance Appearance { material Material { diffuseColor 0.0 1.0 1.0 } } geometry Cylinder { radius 4.0 height 3.0 side TRUE top TRUE bottom TRUE } }
Figura 3.3 Exemplo da criação de um cilindro cyan O nó Sphere, usado para criação de esferas centradas na origem, possui um único campo, radius, que determina o seu raio e cuja valor default é 1.0. Sua sintaxe é: Sphere { radius 1.0 # SFFloat } A figura 3.4 ilustra a visualização do exemplo a seguir: #VRML V2.0 utf8 # Desenho de uma esfera verde Shape { appearance Appearance { material Material { diffuseColor 0.0 0.8 0.0 } } geometry Sphere { radius 4.0 } } Figura 3.4 Exemplo da criação de uma esfera verde
Como já comentado, é possível agrupar qualquer número de nós e manipular o grupo como uma única entidade. Este grupo pode ter qualquer número de membros, ou children (filhos), que podem também ser shapes ou outros grupos que contém shapes e grupos. O nó que contém os nós filho é chamado de parent (pai). Como grupos podem conter outros grupos, o pai de um grupo pode ser filho de outro grupo de nível mais alto, e assim por diante. Então, o pai do grupo de nível mais alto é chamado de root (raiz).
VRML fornece vários tipos de nós de agrupamento. A seguir, está apresentada a sintaxe de um deles, o nó Group. Group { children [ ] # MFNode bboxCenter 0.0 0.0 0.0 # SFVec3f bboxSize -1.0 -1.0 -1.0 # SFVec3f addChildren # MFNode removeChildren # MFNode } O valor do campo children especifica uma lista de nós child que deve ser incluída no grupo. Valores de campo típicos para children incluem o nó Shape e outros nós Group. Quando é exibido um arquivo com este nó, o navegador VRML constrói o grupo através da construção de cada um dos Shapes e Groups contidos no Group. O valor default para este campo é uma lista vazia de children. O próximo exemplo (figura 3.5) ilustra a utilização deste nó. #VRML V2.0 utf8 # The VRML 2.0 Sourcebook # Copyright (c) 1997 # Andrea L. Ames, David R. Nadeau, and John L. Moreland Group { children [ Shape { appearance DEF White Appearance { material Material { } } geometry Box { size 10.0 10.0 10.0 } }, Shape { appearance USE White geometry Sphere { radius 7.0 } }, Shape { appearance USE White geometry Cylinder { radius 12.5 height 0.5 } }, Shape { appearance USE White geometry Cylinder { radius 4.0 height 20.0 } }, Shape { appearance USE White geometry Cylinder { radius 3.0 height 30.0 } }, Shape { appearance USE White geometry Cylinder { radius 1.0 height 60.0 } } ] }
Figura 3.5 Exemplo da utilização do nó Group
Comentários, dúvidas, sugestões, envie um mail para [email protected] |
Última alteração em 27 de julho de 2000.