Matemática e Computação
 

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

 

 

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