9
- Usando Coordenadas Geométricas. Pontos. Linhas. Construção
de Superfícies.
9.1
- O nó Coordinate
Formas
complexas, como terrenos, animais e plantas, são difíceis
de serem representadas com os nós de primitivas geométricas
Box, Sphere, Cone e Cylinder.
Objetos complexos podem ser construídos através de pontos,
linhas e faces.
O
nó Coordinate especifica a localização
3D de um ponto.
Os nós PointSet, IndexedLineSet
e IndexedFaceSet usam o nó
Coordinate como valor do campo coord e especificam as ligações
desses pontos.
Sintaxe
do nó Coordinate
Coordinate{
point
[]
}
9.2
- PointSet
O
nó PointSet define um conjunto
de pontos.
Um ponto é exibido em cada coordenada especificada.
Sintaxe
do nó PointSet
PointSet
{
color
NULL
coord
NULL
}
Exemplo 151:
Exemplo do nó PointSet.
#VRML
V2.0 utf8
#Eixos
Inline
{ url "C:/VRML/Eixos.wrl" }
#
#Conjunto de Pontos
Shape {
appearance
Appearance {
}
geometry
PointSet {
coord
Coordinate {
point
[
#
Pontos ciano
1.0
1.0 1.0,
0.5
1.0 1.0,
1.5
1.5 1.5,
1.0
0.5 1.0,
2.0
2.0 2.0,
1.0
1.0 0.5,
2.5
2.5 2.5,
1.5
2.0 2.0,
3.0
3.0 3.0,
2.0
1.5 2.0,
#
Pontos Amarelos
-1.0
-1.0 -1.0,
-0.5 -1.0 -1.0,
-1.5
-1.5 -1.5,
-1.0 -0.5 -1.0,
-2.0
-2.0 -2.0,
-1.0 -1.0 -0.5,
-2.5 -2.5 -2.5,
-1.5 -2.0 -2.0,
-3.0
-3.0 -3.0,
-2.0 -1.5 -2.0
]
}
color
Color {
color
[
#
Pontos ciano
0.0
1.0 1.0,
0.0 1.0 1.0,
0.0 1.0 1.0,
0.0 1.0 1.0,
0.0 1.0 1.0,
0.0
1.0 1.0,
0.0
1.0 1.0,
0.0 1.0 1.0,
0.0 1.0 1.0,
0.0 1.0 1.0,
#
Pontos amarelos
1.0
1.0 0.0,
1.0 1.0 0.0,
1.0 1.0 0.0,
1.0 1.0 0.0,
1.0 1.0 0.0,
1.0
1.0 0.0,
1.0 1.0 0.0,
1.0 1.0 0.0,
1.0 1.0 0.0,
1.0 1.0 0.0,
]
}
}
}
9.3
- IndexedLineSet
O
nó IndexedLineSet cria geometrias a partir de linhas.
Por
default, cada coordenada definida em um nó Coordinate é implicitamente numerada (0 para a primeira coordenada, 1 para a segunda,
etc).
Para
construir uma linha com o nó IndexedLineSet, são definidas
as ligações entre os pontos no campo coordIndex.
Exemplo:
0, 1, -1 ... Uma reta une 0 a 1. -1 finaliza a sequência.
Syntax:
do nó IndexedLineSet {
IndexedLineSet
{
set_colorIndex
#
atribui valores ao campo colorIndex
set_coordIndex
#
atribui valores ao campo coordIndex
coord
NULL
#contém
um nó Coordinate, listando os vértices a
serem usados
coordIndex
[ ] # corresponde
a uma lista de índices dentro do nó
Coordinate, indicando
quais vértices são
#
conectados e em que ordem
color
NULL
#
pode conter um nó Color com as cores a serem
usadas ou "por
segmento" ou "por vértice"
colorIndex
[ ]
#
estabelece uma lista de índices para o nó Color
colorPerVertex
TRUE
}
Caso
o campo color seja NULL e haja um nó Material definido no nó
Appearance, afetando o IndexedLineSet, o campo emissiveColor de Material
deverá ser usado para desenhar as linhas. Porém, para
o caso de color não ser NULL, procede-se da seguinte maneira:
a)
Se colorPerVertex é FALSE:
1-
Se o campo colorIndex não está vazio, então,
uma cor é usada para cada linha do IndexedLineSet. Deve haver
tantos índices no colorIndex, quantas forem as linhas do IndexedLineSet.
Além disso, se o maior índice em colorIndex é
N, então, deve haver N + 1 cores no nó Color. O campo
colorIndex não pode conter valores negativos.
2-
Se o campo colorIndex está vazio, as cores no nó Color
são aplicadas a cada uma das linhas do IndexedLineSet em ordem.
Deve haver tantas cores quantas forem as linhas.
b)
Se colorPerVertex é TRUE:
1-
Se colorIndex não está vazio, as cores são aplicadas
aos vértices do IndexedLineSet da mesma maneira que o campo
coordIndex é usado para fornecer as coordenadas de cada vértice
no nó Coordinate. O campo colorIndex deve conter o mesmo número
de índices do campo coordIndex e também "marcadores
de fim de linha (-1)" nos mesmos lugares em que aparecem no campo
coordIndex. Se o maior índice em colorIndex for N, deverá
haver N+1 cores no nó Color.
2-
Se colorIndex está vazio, então, o campo coordIndex
é usado para escolher as cores do nó Color. Se o maior
índice em coordIndex for N, deverá haver N+1 cores no
nó Color.
Descreve-se,
neste nó, um objeto construído a partir de uma série
de segmentos de linhas formadas a partir de vértices posicionados
em coordenadas fornecidas. Esse nó é essencialmente
parecido com o IndexedFaceSet, porém, aqui, em vez de polígonos,
é visualizado um conjunto de linhas. Os segmentos são
definidos a partir de índices do campo coordIndex. Um "indice
- 1" indica o término de uma série de segmentos
conectados e que uma nova série será iniciada.
Os
conjuntos de linhas não são afetados por luzes e a eles
não são associadas texturas. Também não
são válidos em colisões .
Exemplo 152: Exemplo
de IndexedLineSet
#VRML
V2.0 utf8
#Desenho das arestas de um cubo
#Eixos
Inline { url "C:/VRML/Eixos.wrl" }
#Desenha
linhas com diferentes cores
Shape {
appearance
Appearance {
}
geometry
IndexedLineSet {
coord
Coordinate {
point
[
# Cubo
1.0
1.0 1.0, 1.0 -1.0 1.0,
-1.0
-1.0 1.0, -1.0 1.0 1.0,
1.0
1.0 -1.0, 1.0 -1.0 -1.0,
-1.0
-1.0 -1.0, -1.0 1.0 -1.0
]
}
color
Color {
color
[
1.0
0.0 0.0, 0.0 1.0 0.0, 0.0 0.0 1.0
]
}
coordIndex
[
#
Linha vermelha (paralela ao eixo x)
0,
3, -1, 1, 2, -1, 4, 7, -1, 5, 6, -1,
#
Linha verde (paralela ao eixo y)
0,
1, -1, 2, 3, -1, 4, 5, -1, 6, 7, -1,
#
Linha azul (paralela ao eixo z)
0,
4, -1, 1, 5, -1, 2, 6, -1, 3, 7, -1
]
colorIndex
[
0,
0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2
]
colorPerVertex
FALSE
}
}