Forme geometrice definte prin linii sau fete

29

    Aici descriem modul de utilizare a nodurilor IndexedLineSet si IndexedFaceSet.

    Pentru a descrie unul dintre cele mai simple corpuri Pitagoreice cum este octaedrul, prima conditie este sa precizam coordonatele punctelor. Coordonatele punctelor in nodurile IndexedLineSet si IndexedFaceSet sunt indexate implicit incepand cu indexul 0. O alegere a coordonatelor (X,Y,X) pentru cele 6 puncte reprezentand varfurile octaedrului este

 0  1  0 #varful 0 
 0  0  1 #varful 1
 1  0  0 #varful 2
 0  0 -1 #varful 3
-1  0  0 #varful 4
 0 -1  0 #varful 5

    Muchiile octaedrului pot fi parcurse una dupa alta trecand prin varfuri, de exemplu, in ordinea:

0 1 2 0 3 2 5 1 4 3 5 4 0

    In general, muchiile unei figuri geometrice nu pot fi descrise, printr-o linie formata din segmente de dreapta (linie poligonala, sau polilinie) ca in exemplul de mai sus. De regula, parcurgerea tuturor muchiilor necesita mai multe polilinii pentru descrierea tuturor muchiilor. Un nod Shape care descrie octaedrul folosind aceste reprezentari este dat in continuare.

Shape {
  appearance Appearance {
    material Material {
#aici se precizeaza culoarea liniilor
      emissiveColor 0 1 1 
    }
  }
  geometry IndexedLineSet {
    coord DEF Octaedru Coordinate {
      point [  0  1  0 
               0  0  1
               1  0  0
               0  0 -1
              -1  0  0
               0 -1  0
      ]
    }
    coordIndex [
      0 1 2 0 3 2 5 1 4 3 5 4 0 -1
    ]
  }
}

    In acest exemplu observam ca la sfarsitul unei linii poligonale se adauda -1 pentru a preciza terminarea liniei. La descrierea nodul geometric IndexedLineSet au fost folosite doua campuri: coord, respectiv coordIndex. Campul coord contine nodul Coordinate care este descris prin campul point. Campul point este de tip MFVec3f. Campul coordIndex este de tip MFInt32. 

    Nodurile pot capata nume cum este aici nodul Coordinate. Cuvantul rezervat pentru aceasta este DEF urmat de numele atribuit nodului (Octaedru aici). Referirea la acest nume se face cu cuvantul rezervat USE. USE precizeaza, in contextul aceluiasi fisier VRML, ca va fi utilizata din nou aceeasi definitie. Exemplul urmator descrie suprafata octaedrului definit de coordonatele de mai sus (utilizand USE) folosind nodul geometric IndexedFaceSet.

Shape {
  appearance Appearance {
    material Material {
      emissiveColor 0 0 1
      diffuseColor 1 0 0
      ambientIntensity 0.9 
    }
  }
  geometry IndexedFaceSet {
    coord USE Octaedru
    coordIndex [ 0 1 2 -1
                 0 2 3 -1
                 0 3 4 -1
                 0 4 1 -1
                 5 2 1 -1
                 5 3 2 -1
                 5 4 3 -1
                 5 1 4 -1
    ]
  }
}

    Instructiunea coord USE Octaedru utilizeaza coordonate definite anterior in nodul Coordinate cu numele Octaedru. Campul coodIndex descrie prin indexele varfurilor fetele octaedrului. Ordinea parcurgerii nodurilor unei fete specifica prin regula mainii drepte (sau a burghiului drept) care suprafata va fi desenata (degetul mare indicand normala la suprafata care se va desena, iar celelalte degete fiind indreptate in sensul de parcurgere a poliliniei).

   Fisierul VRML cu care a fost realizata figura de mai sus este dat aici.

Cornel Mironel Niculae, 2003-2008

13-Nov-2009