28 votes

Technique de modélisation solide

Si je construis une forme à l'aide constructive solid geometry techniques, comment puis-je construire une maquette pour le rendu? Je suis conscient des algorithmes pour directement le rendu de la CSG des formes, mais je veux le convertir en une maquette, juste une fois, pour que je puisse la rendre plus "normalement"

Pour ajouter un peu plus de détails. Donné une description d'une forme comme "Un cube ici, à l'intersection d'une sphère ici, soustraire une bouteille" je veux être en mesure de calculer un maillage polygonal.

19voto

Joe Points 798

Il existe deux approches principales. Si vous avez un ensemble de formes polygonales, il est possible de créer un arbre BSP pour chaque forme, puis les arbres BSP peuvent être fusionnées. À Partir De Wikipedia,

1990 Naylor, Amanatides, et Thibault fournir un algorithme de fusion de deux bsp arbres pour former une nouvelle bsp arbre de les deux arbres. Cette offre plusieurs avantages, notamment: la combinaison déplacer des objets représentés par BSP les arbres avec un environnement statique (également représenté par un arbre BSP), très efficace CSG opérations sur les polyèdres, exacte de détection de collisions en O(log n * log n), et le bon de commande des surfaces transparentes contenues dans deux interpénétrant les objets (a été utilisé pour un x-ray vision d'effet).

Le papier est trouvé ici la Fusion des arbres BSP rendements polyédriques ensemble des opérations.

Alternativement, chaque forme peut être représenté comme une fonction de l'espace (par exemple signé distance à la surface). Tant que la surface est définie comme lorsque la fonction est égale à zéro, les fonctions peuvent ensuite être combinées à l'aide d' (MIN == intersection), (MAX == union), et (NÉGATION = non) les opérateurs pour imiter l'ensemble des opérations. La surface résultante peut alors être extrait comme les positions où la fonction combinée est égale à zéro à l'aide d'une technique comme Marching Cubes. Meilleure surface de méthodes d'extraction Double Marching Cubes ou en Double Contour peut également être utilisé. Ce sera, bien sûr, le résultat dans un discret approximation de la vraie CSG surface. Je suggère l'utilisation de Double Contour, car il est capable de reconstruire les traits accentués, comme les coins de cubes .

4voto

Roman Points 31

Ces bibliothèques semblent faire ce que vous voulez:

www.solidgraphics.com/SolidKit/ carve-csg.com/ gts.sourceforge.net/

2voto

e.James Points 51680

Ici sont quelques-uns Google Scholar liens qui peuvent être utiles.

À partir de ce que je peux dire des résumés, l'idée de base est de générer un nuage de points à partir de la volumétrie des données disponibles dans la CSG modèle, et ensuite utiliser un peu plus commun des algorithmes pour générer un maillage de visages en 3D à l'ajustement du nuage de points.

Edit: en Faisant quelques recherches supplémentaires, ce genre d'opération est appelée "conversion de la CSG à B-Rep (boundary representation)". Les recherches sur cette chaîne conduire à une utile PDF:

http://www.scielo.br/pdf/jbsmse/v29n4/a01v29n4.pdf

Et, pour de plus amples informations, la clé de l'algorithme est appelé le "Marching Cubes Algorithme". Essentiellement, la CSG modèle est utilisé pour créer un dispositif de modèle de l'objet avec des voxels, et puis le Marching Cubes algorithme est utilisé pour créer un maillage 3D de la voxel de données.

2voto

John Pritchard Points 21

Voir aussi "Géométrie solide constructive pour les polyèdres triangulés" (1990) Philip M. Hubbard doi: 10.1.1.34.9374

1voto

Victor Liu Points 2195

Vous pourriez essayer de trianguler (tetrahedralize) chaque primitive, puis effectuez les opérations booléennes sur le maillage tétraédrique, qui est "plus facile" puisque vous n'avez qu'à vous soucier de tétraèdre-tétraèdre opérations. Ensuite, vous pouvez effectuer des limites d'extraction pour obtenir le B-rep. Puisque vous savez que les formes primitives du point de vue analytique, on peut construire personnalisé tetrahedralizations de votre primitives pour répondre à vos besoins au lieu de compter sur une génération de maillage de la bibliothèque.

Par exemple, supposons que votre objet est l'union d'un cube et un cylindre, et supposons que vous avez un tetrahedralization des deux objets. Afin de calculer la limite de la représentation de l'objet, de la première étiquette de la frontière facettes de la tétraèdres de chaque objet primitif. Ensuite, vous effectuez l'opération union: si deux tétraèdres sont disjoints, alors rien de ce qui doit être fait; les deux tétraèdres doit exister dans le résultat de ce polyèdre. Si elles se croisent, alors il ya un certain nombre de cas (probablement de l'ordre d'une dizaine) qui ont besoin d'être traitées. Dans chacun de ces cas, le volume des deux tétraèdres doit être re-triangulée d'une manière qui respecte les contraintes de surface. C'est un peu plus facile par le fait que vous ne devez pas vous inquiéter au sujet de tétraèdres, par opposition à des formes plus compliquées. La limite de la facette étiquettes doivent être conservées dans le processus, de sorte que dans la dernière collection de tétraèdres, la limite facettes peuvent être extraites pour former un triangle du maillage de la surface.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X