9.4 - IndexedFaceSet
Superfícies
curvas podem ser representadas por um conjunto de faces planas. No
nó IndexedFaceSet, cada uma dessas faces é descrita
através de uma lista de vértices e da especifição
da ligação entre os vértices.
Para
construir as faces:
as
coordenadas dos vértices são listadas no campo coord;
no
campo coordIndex, são definidas as ligações
dos vértices.
Exemplo:
0, 1, 2, 3, -1,... A face é formada pelos vértices 0, 1, 2 e 3. -1 delimita a definição de uma face.
Sintaxe
do nó IndexedFaceSet
IndexedFaceSet
{
set_colorIndex #
atribui valores ao campo colorIndex
set_coordIndex #
atribui valores ao campo coordIndex
set_normalIndex
# atribui valores ao campo normalIndex
set_texCoordIndex #
atribui valores ao campo texCoordIndex
color NULL #
pode conter um nó Color com as cores a serem usadas ou "por
face" ou "por vértice"
coord NULL #
contém um nó Coordinate onde estão listados
os vértices do IndexFaceSet
normal NULL #
pode conter um nó Normal a fim de que as normais sejam especificadas
explicitamente
texCoord NULL #
pode conter um nó TextureCoordinate, a fim de se especificar,
explicitamente, uma textura para
# o
nó IndexedFaceSet
ccw TRUE #
indica se os vértices de cada face, quando vista de frente,
são listados no sentido anti-horário (TRUE)
#
ou horário (FALSE)
colorIndex [] #
estabelece uma lista de índices para o nó Color
colorPerVertex TRUE
convex TRUE #
indica se todas as faces são convexas ou não
coordIndex [] #
lista de polígonos cada qual especificado como uma lista
de índices no nó Coordinate
creaseAngle 0 # ângulo segundo o qual permite-se suavizar as bordas das figuras
(ângulo de uma pequena
# curvatura
entre arestas adjacentes), diminuindo o seu "facetamento"
normalIndex [] #
estabelece uma lista de índices para o nó Normal
normalPerVertex TRUE #
indica se as normais são providas "por vértice"
(TRUE) ou "por face" (FALSE). O valor
# deste campo é ignorado se o campo normal for NULL
solid TRUE #
indica se as faces são sólidas, em outras palavras,
se o usuário pode enxergar o lado interno de cada
# uma delas ou não
texCoordIndex [] #
estabelece uma lista de índices para o nó TextureCoordinate
}
Caso
o campo color seja NULL, o objeto geométrico deverá
ser renderizado normalmente, usando-se um nó Material e uma
textura definidos no nó Appearance. Porém, para o caso
de color não ser NULL, procede-se da seguinte maneira:
a)
Se colorPerVertex é FALSE, as cores são aplicadas a
cada uma das faces como a seguir:
1-
Se o campo colorIndex não está vazio, então,
uma cor é usada para cada face do IndexedFaceSet. Deve haver
tantos índices no colorIndex, quantas forem as faces do IndexedFaceSet.
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 faces do IndexedFaceSet em ordem.
Deve haver tantas cores quantas forem as faces.
b)
Se colorPerVertex é TRUE, as cores são aplicadas a cada
um dos vértices, como a seguir:
1-
Se colorIndex não está vazio, as cores são aplicadas
aos vértices do IndexedFaceSet 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 face (-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.
Exemplo 153: Exemplo
de IndexedFaceSet
#VRML
V2.0 utf8
#Construcao de um cubo com faces de diferentes cores.
#Eixos
Inline { url "C:VRML/Eixos03.wrl" }
#
Desenho do cubo
Shape {
appearance
Appearance {
material
Material { }
}
geometry
IndexedFaceSet {
coord
Coordinate {
point
[
#
Coordenadas do 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
]
}
coordIndex
[
#
Faces do cubo
#Face
vermelhas (perpendiculares ao eixo x)
2,
3, 7, 6, -1,
0, 1, 5, 4, -1,
#Faces
verdes (perpendiculares ao eixo y)
0,
4, 7, 3, -1,
1, 2, 6, 5, -1,
#Faces
azuis (perpendiculares ao eixo z)
0,
3, 2, 1, -1,
4, 5, 6, 7, -1,
]
color
Color {
color
[
1.0
0.0 0.0, 0.0 1.0 0.0, 0.0 0.0 1.0
]
}
colorPerVertex
FALSE
colorIndex
[
0,
0, 1, 1, 2, 2, -1
]
}
}