La façon de générer les bords et les faces d'une forme primitive comme une boîte, un cône et tous ceux que vous avez cités est de les générer en même temps que vous créez les sommets. En fait, vous devez créer les sommets d'une manière logique qui facilite le calcul des arêtes et des faces en conséquence.
Il existe des algorithmes qui prennent en entrée un ensemble de points dans l'espace et calculent une soi-disant " triangulation d'ensemble de points " dessus, mais le problème de la triangulation d'ensemble de points est NP-complet , de sorte qu'il est plus rapide de rendre les bords et les faces au fur et à mesure que de calculer les sommets et de laisser un algorithme faire le travail. Juste pour vous faire savoir que cette solution existe.
En dehors de cette solution inefficace, je pense que vous ne pouvez traiter les primitives qu'au cas par cas, comme dans les exemples qui suivent.
Un maillage est composé de sommets et de faces . Les arêtes sont contenues dans la description des faces, sauf si votre maillage contient des lignes qui ne constituent pas des faces. Les sommets sont des tuples de 3 coordonnées à virgule flottante. Les arêtes sont simplement des paires de références aux sommets, mais là encore, vous n'en aurez sûrement pas besoin. Dites par exemple que vos sommets sont dans un tableau indexé. Eh bien, vos bords pourraient alors être des paires d'indices de ce tableau. Les faces sont des triplets de références à des sommets ou des triplets d'indices dans le cas du tableau indexé .
Vous devriez pouvoir compter les sommets, les arêtes et les faces qui composent chacune de ces formes primitives parce que pouvoir les compter signifie comprendre les propriétés de l'objet qui vous aide à concevoir la méthode avec laquelle vous les construirez, en utilisant des boucles et d'autres outils comme nous le verrons.
Cône
Pour un cône avec n + 2 sommets, 3n arêtes et 2n faces:
- Créez deux sommets séparés.
- Faites un cercle autour de l'un des sommets (le sommet de base), c'est-à-dire dans un plan perpendiculaire au segment entre les deux premiers sommets. J'espère que vous pourrez faire un cercle en utilisant la trigonométrie, non? C'est déjà tous les sommets du cône. C'est aussi un tiers de tous les bords (il y a n bords dans le cercle et 3n au total).
- Faites n arêtes du sommet de base aux n sommets du cercle. Vous pouvez créer la moitié des faces (c'est-à-dire n faces) en faisant cela.
- Faites n arêtes du sommet de la pointe aux n sommets du cercle. Vous pouvez créer l'autre moitié des faces (c'est-à-dire n faces) en faisant cela.
1)
2)
3)
4)
Résultat final:
Vous pouvez également créer les arêtes et les faces lorsque vous exécutez la boucle qui forme le cercle. Même complexité, même chose. Faites un sommet sur le cercle, stockez-le dans votre tableau de sommets, ajoutez le bord correspondant (paire d'indices) au tableau de paires d'indices si vous en avez envie, et enfin ajoutez la face correspondante à votre tableau de triplets d'indices . Passez au sommet suivant.
Le cylindre et le tube: ne pas faire deux fois le même travail, et les quads
Encore une fois, pour le tube, il commence par un sommet et un cercle qui sera le centre du disque supérieur ou inférieur du cylindre:
- Faites un sommet.
- Faites un cercle autour du sommet. Ajoutez des arêtes (si vous voulez des arêtes) entre les sommets successifs du cercle et entre le sommet central et chaque sommet de cercle. Ajoutez des faces entre chaque triplet de sommets composé du sommet central et de deux sommets successifs sur le cercle.
- Dupliquez tout cela, traduisez la copie dans la direction perpendiculaire à la base que vous venez de faire, par la longueur du cylindre souhaité.
- Reliez le haut et le bas.
Pour relier le haut et le bas, vous devez faire des quads entre des paires de paires de sommets qui se font face. Alors, pensez-y et pourquoi ne pas vous faire une fonction qui fait deux faces triangulaires sur quatre sommets?
Terminé. Notez que cette fois nous utilisons le fait que la même structure (cercle + centre) apparaît deux fois dans un cylindre pour prendre un raccourci. Nous n'avons pas à faire tous les sommets, arêtes et faces à la main, contrairement au cône où c'était nécessaire.
En suivant ce principe de paresse, il est également possible de ne faire qu'un quart du cercle et de le dupliquer, et encore une fois, de faire un cercle complet avec des transformations très simples (valable avec n'importe quel cercle donc avec le cône aussi), mais c'est vraiment exagéré pour un forme pas si complexe.
Vous devez toujours utiliser les propriétés géométriques des objets que vous créez pour simplifier leur fabrication . A savoir, leurs symétries et invariants .
Pour un cylindre, ne faites pas le sommet de base, faites simplement le cercle, dupliquez, traduisez la copie, faites les quads, c'est fait.
La sphère et la capsule: ajouter de la complexité, toujours pas le même travail deux fois
Pour créer une capsule, nous voulons créer une sphère UV, la diviser en deux moitiés, traduire la première moitié, puis relier les deux aux côtés des capsules.
Encore une fois, il est possible de faire seulement un huitième (!!) de la sphère, puis de le dupliquer et de l'inverser, puis de dupliquer et d'inverser le résultat sauf le long d'un autre axe, etc., pour obtenir une sphère pleine, en 4 étapes (créez le huitième , dupliquer et inverser trois fois). Peut-être exagéré, mais moins que dans le cas du cercle.
Une simple sphère UV:
En fait, nous n'en faisons qu'une moitié (par exemple), dupliquons cette moitié, retournons la copie à l'envers et la traduisons par la longueur de la capsule:
Nous relions la moitié supérieure et inférieure:
Le vrai (un peu) dur labeur vient de la trigonométrie qui sert à faire une sphère. L'ensemble de tous les sommets appartenant à une sphère UV peut être décrit comme l'ensemble de tous les points de la forme:
où R est le rayon de la sphère et, pour un certain entier pair positif N , nous avons la constante
θ = × π / N ,
k et n sont des entiers avec k variant de 0 à 2N-1 et n variant de -N / 2 à + N / 2 .
Pour faire une demi-sphère ou un huitième d'une sphère, vous devez restreindre l'ensemble des valeurs prises par k et n .
Si k étaient des nombres réels et pas seulement des nombres entiers, vous obtiendriez une sphère entière, pas seulement les sommets sur sa surface. Donc, ce que nous avons fait ici est de pixelliser l'équation de surface de la primitive .
Le redoutable tore : c'est facile après tout ce qu'on a vu!
Encore une fois, plus de trigonométrie, plus de sommets, plus de quads, plus de symétries, plus d'invariants ... plus de géométrie! Découvrez l'équation de la surface d'un tore, "pixellisez-le correctement", simplifiez le problème en utilisant les symétries (évidentes) du tore et, enfin, parcourez l'ensemble des sommets que vous venez de définir et faites les bords et les faces comme vous aller!
Voir? Complètement simple.