Matemática e Computação
 

Mensagens
Não te abandones em lugares onde a luz da tua harmonia não esteja presente.

 

 

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