Introdução à VRML 2.0
(Profa. Isabel Harb Manssour)

[Anterior]  [Próxima]  [Principal]

 

3. Construindo e Agrupando Shapes Pré-Definidos

O 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
	}
}

Image122.gif (17528 bytes)

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
	}
}

Image123.gif (3691 bytes)

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

 ../Imagens/EMBAN15.GIF (1469 bytes)

../Imagens/E-MAIL.JPG (3237 bytes) Comentários, dúvidas, sugestões, envie um mail para [email protected]

../Imagens/EMBAN15.GIF (1469 bytes)


[Anterior]  [Próxima]  [Principal]

Última alteração em 27 de julho de 2000.