X3D : Formes
Introduction
Cet article nécessite la lecture et la compréhension de la page X3D. Il aborde la question des différentes formes disponibles en langage x3D ainsi que leurs spécificités. Pour voir comment "lier" et déplacer ces formes, voir l'article X3D - regroupement et transformations.
Balise Shape
Toutes les formes doivent impérativement être englobées dans la balise <shape>, elle-même contenue dans la balise <scene> et <x3d>
Formes 3D
Axes
Pour faire apparaître les axes dans la scène 3D, il faut l'appeler par les balises suivantes :
<IndexedLineSet colorIndex='0 1 2' colorPerVertex='false' coordIndex='0 1 -1 0 2 -1 0 3 -1'> <Coordinate point='0 0 0 1.0 0 0 0 1.0 0 0 0 1.0'/> <Color color='1 0 0 0 0.6 0 0 0 1'/> </IndexedLineSet>
Ce code un peu barbare fourni par X3D-Editor s'explique ainsi :
- La balise IndexedLineSet permet de créer des lignes
- colorIndex (0 = rouge, 1 = vert et 2 = bleu), concerne la couleur des trois axes
- Les nombres figurant dans Color color sont compris entre 0 et 1 et vont par tierce. Chaque tierce se réfère à un axe (dans l'ordre d'apparition) et représentent la quantité de rouge, de vert et de bleu (RGB)
- colorPerVertex (false = trois axes, true = les deux premiers axes ne font plus qu'un)
- coordIndex est défini ainsi :
"coordIndex indices provide order in which coordinates are applied. Order starts at index 0, commas are optional between sets, use -1 to separate indices for each polyline." IndexedLineSet sur doc.x3dom.org, consulté le 27.04.2016.
Ainsi, dans le code ci-dessus, les polylines sont séparées par "-1" et l'ordre d'apparition reste l'ordre d'apparition habituel.
Cube
Le cube est appelé par la balise
<Box size='x y z'/>
en insérant les longueurs du cube sur les trois axes (hauteur, longueur, profondeur).
Cône
Le cône est appelé par la balise <Cone height='NUMBER' bottomRadius='NUMBER' bottom='true/false' side='true/false'/>
- Height choisit la hauteur du cône, la hauteur peut être négative (change le sens de la pointe)
- BottomRadius choisit le radius du cercle de départ.
- Bottom false fait disparaître le fond et le cône devient un trou noir si on le regarde depuis le dessous. (Mais littéralement : la forme n'apparaît plus dans la scène.)
- Side false fait disparaître le cône et ne laisse qu'un disque (le bottom), visible par le dessous uniquement.
Cylindre
Le cylindre est appelé par la balise <Cylinder height='NUMBER' radius='NUMBER' bottom='true/false' side='true/false' top='true/false'/>
- Mêmes remarques que pour le cône. Top false fait disparaître le cercle situé au-dessus du cylindre.
Sphère
La sphère est appelée par la balise <Sphere radius='NUMBER'/>
Texte
Le texte est appelé par la balise
<Text string='"Texte" "Deuxième texte"' solid='false/true'> <FontStyle family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='NUMBER' style='BOLD'/> </Text>
- Le fait de mettre un espace entre "Texte" "Deuxième texte" insère un retour à la ligne. D'où les deux objets "MIDDLE" sous justify.
Formes 2D
Cercle
Le cercle est appelé par la balise <Circle2D radius='NUMBER'/>
Arc de cercle
L'arc de cercle est appelé par la balise
<Arc2D radius='1.0' startAngle='0' endAngle='3.14159'/>
- Les angles ne se comptent pas en degré mais sur 2π.
- L'angle de l'arc de cercle ci-dessus correspond donc à un angle de 180°, commençant à 0° et se terminant à 180°, faisant un demi-cercle
Rectangle
Le rectangle est appelé par la balise
<Rectangle2D size='4 2' solid='false'/>
- Size comprend la largeur et la longueur
- Solid false : seul le pourtour apparaît.
Triangle
Le triangle est appelé par la balise
<TriangleSet2D vertices='0 0 -0.5 1 -1.2 0.1 0 0 2 0.5 0.5 2 0 0 -0.3 -3.5 3 -2' solid='false'/>
- Chaque triangle est représenté par 6 chiffres, soit 3 paires de chiffres correspondant à l'emplacement des sommets des triangles
- Avec le code ci-dessus apparaissent trois triangles de taille croissante reliés par un de leur sommet (0 0)
- solid='false' permet de voir les triangles de face ou de dos, alors que solid='true' ne permet de les voir que de face
Polyligne
Une ligne formée par plusieurs lignes est appelée par la balise
<Polyline2D lineSegments='-4 1 -3 2 -2 1 0 3 4 0'/>
- Chaque paire de chiffres représente un point sur le plan 2D
- Le premier chiffre représente l’abscisse et le second l'ordonnée
IndexedFaceSet
La balise IndexedFaceSet est assez complexe et nécessite l'utilisation d'un logiciel comme X3D-edit.
Par exemple, le long code ci-dessous créera un simple carré (rectangle 2D) aux bords arrondis :
<IndexedFaceSet coordIndex='0 1 2 3 0 -1 0 14 15 1 0 -1 1 25 26 2 1 -1 2 36 37 3 2 -1 3 47 4 0 3 -1 0 4 5 6 7 8 9 10 11 12 13 14 0 -1 1 15 16 17 18 19 20 21 22 23 24 25 1 -1 2 26 27 28 29 30 31 32 33 34 35 36 2 -1 3 37 38 39 40 41 42 43 44 45 46 47 3 -1' creaseAngle='6.28' solid='false'> <Coordinate point='0.450 0.450 0.000 0.450 -0.450 0.000 -0.450 -0.450 0.000 -0.450 0.450 0.000 0.450 0.550 0.000 0.466 0.549 0.000 0.481 0.545 0.000 0.495 0.539 0.000 0.509 0.531 0.000 0.521 0.521 0.000 0.531 0.509 0.000 0.539 0.495 0.000 0.545 0.481 0.000 0.549 0.466 0.000 0.550 0.450 0.000 0.550 -0.450 0.000 0.549 -0.466 0.000 0.545 -0.481 0.000 0.539 -0.495 0.000 0.531 -0.509 0.000 0.521 -0.521 0.000 0.509 -0.531 0.000 0.495 -0.539 0.000 0.481 -0.545 0.000 0.466 -0.549 0.000 0.450 -0.550 0.000 -0.450 -0.550 0.000 -0.466 -0.549 0.000 -0.481 -0.545 0.000 -0.495 -0.539 0.000 -0.509 -0.531 0.000 -0.521 -0.521 0.000 -0.531 -0.509 0.000 -0.539 -0.495 0.000 -0.545 -0.481 0.000 -0.549 -0.466 0.000 -0.550 -0.450 0.000 -0.550 0.450 0.000 -0.549 0.466 0.000 -0.545 0.481 0.000 -0.539 0.495 0.000 -0.531 0.509 0.000 -0.521 0.521 0.000 -0.509 0.531 0.000 -0.495 0.539 0.000 -0.481 0.545 0.000 -0.466 0.549 0.000 -0.450 0.550 0.000'/> </IndexedFaceSet>
- creaseAngle doit être plus haut que ou égal à 0.0 degrés. "If the angle between the geometric normals of two adjacent faces is less than the crease angle, normals shall be calculated so that the faces are shaded smoothly across the edge; otherwise, normals shall be calculated so that a lighting discontinuity across the edge is produced." - Page IndexedFaceSet sur doc.x3dom, consultée le 02.05.2016 (désolée, je n'arrive pas à traduire proprement et je n'arrive pas à voir la différence en changeant cette valeur, Utilisatrice:Maurin0)
Sources
Le code présent pour illustrer cet article a été généré par l'éditeur X3D-Edit 3.3.
Site de x3dom