Les objets complexes peuvent être difficiles à obtenir par mélange de formes simples : Terrains, Animaux, Plantes, Véhicules ...
Au lieu de construire ces objets à partir de formes primitives, on les construits à partir de formes atomiques : Points, Lignes, Faces
Les objets complexes sont rarement créés avec un éditeur de texte. On utilisera plutôt une application graphique 3D appelée un modeleur. La plupart de ces applications permettent de générer du VRML.
On peut citer :
![]() | Cosmoworld - SGI : http://www.sgi.com |
![]() | 3DS Max - Kinetix : http://www.ktx.com/ |
![]() | Internet 3D Space Builder - Paragraph http://www.paragraph.com/ |
![]() | VRealm Builder - IDS http://www.ids-net.com/ |
![]() | Webgraphics Suite - Corel http://www.corel.com/ |
![]() | 3D Website builder - Virtus http://www.virtus.com/ |
La construction d'objet à partir de coordonnées se fait en 2 étapes : Placement de points par définition de coordonnées 3D. Connexion de ces points pour former des objets.
La définition de coordonnées est relative au référentiel courant et se fait dans un noeud Coordinate.
La connexion de ces coordonnées est faite par un noeud de géométrie parmi les suivants : PointSet IndexedLineSet IndexedFaceSet
Un noeud Coordinate contient une liste de coordonnées nécessaire à la construction d'un objet :
![]() | point : MFVect3f ( Liste des coordonnées ) |
![]() | Les coordonnées (de R3) sont séparées par une virgule |
Coordinate {
point [
# X Y Z
2.0 1.0 3.0,
4.0 2.5 5.3,
. . .
]
}
Un noeud PointSet définit un nuage de points dans R3 :
![]() | coord : SFNode ( Noeud de définition des coordonnées ) |
![]() | Un point est placé à chaque coordonnée |
Shape {
appearance Appearance { . . . }
geometry PointSet {
coord Coordinate {
point [ . . .
]
}
}
}
Un noeud IndexedLineSet définit un ensemble de lignes brisées construites sur des points :
![]() | coord : SFNode ( Noeud de définition des coordonnées des points ) | ||||
![]() | coordIndex : MFInt32 ( Noeud de définition des lignes brisées ) on indique dans coordIndex les indices des points (dans le noeud coord) composant chaque ligne brisée en terminant chaque ligne par -1 exemple : 0, 1, 2, 3, -1, 4, 5, -1 définit deux lignes :
|
Shape {
appearance Appearance { . . . }
geometry IndexedLineSet {
coord Coordinate { point [ . . . ] }
coordIndex [ . . . ]
}
}
Exemple :
# Dessin des Axes dans le fichier ci-dessous Shape { appearance Appearance { material Material { diffuseColor 1.0 1.0 1.0 # blanc } } geometry IndexedLineSet { coord Coordinate { point [ 0.0 0.0 0.0, # origine (pt numéro 0) 10.0 0.0 0.0, # X maximum (pt numéro 1) 0.0 8.0 0.0 # Y maximum (pt numéro 2) ] } coordIndex [ 0, 1, -1, # première ligne 0, 2, -1 # deuxième ligne ] } }
Un noeud IndexedFaceSet définit un objet à partir d'un ensemble de polygones :
![]() | coord : SFNode ( Noeud de définition des coordonnées des points ) | ||||
![]() | coordIndex : MFInt32 ( Noeud de définition des polygones ) on indique dans coordIndex les indices des points (dans le noeud coord) composant chaque polygone en terminant chaque polygone par -1 exemple : 0, 1, 2, 3, -1, 4, 5, 6, -1 définit deux polygones :
| ||||
![]() | solid : SFBool ( Indique que les faces de l'objet doivent être dessinées des deux cotés ) | ||||
![]() | ccw : SFBool ( Indicateur d'ordre des sommets des polygones. ccw signifie couter-clock wise : dans le sens contraire des aiguilles d'une montre ) | ||||
![]() | convex : SFBool ( Indicateur de convexité des polygones ) | ||||
![]() | de nombreux autres champs existent permettant de préciser la couleur en chaque point ou sur chaque face, comment l'objet doit être texturé, qu'elles sont les normales aux points ou aux faces (permet de faire des effets d'éclairage sur l'objet)... |
Shape {
appearance Appearance { . . . }
geometry IndexedFaceSet {
coord Coordinate { . . . }
coordIndex [ . . . ]
solid TRUE
ccw TRUE
convex TRUE
}
}
Exemple :
Un noeud Material définit un matériau applicable à la totalité d'un objet.
On peut fixer la couleur d'une partie d'un objet en utilisant un noeud Color.
Un noeud Color contient un ensemble de triplet RGB. Color { color [ 1.0 0.0 0.0, . . . ] }
Un noeud Color peut être utilisé comme valeur du champ color des noeuds de géométrie IndexedFaceSet, IndexedLineSet, PointSet et ElevationGrid.
Pour les IndexedLineSet, on utilisera ensuite le champ colorPerVertex pour indiquer si les couleurs doivent être traitées par sommet ou par ligne. Le champ colorIndex servant à préciser les indices des couleurs à appliquer au sommets (dans l'ordre des sommets du champ coord) ou aux lignes (dans l'ordre de définition des lignes du champ coordIndex).
Pour les IndexedFaceSet, on utilisera ensuite le champ colorPerVertex pour indiquer si les couleurs doivent être traitées par sommet ou par face. Le champ colorIndex servant à préciser les indices des couleurs à appliquer au sommets (dans l'ordre des sommets du champ coord) ou aux faces (dans l'ordre de définition des faces du champ coordIndex).