étant donné un ensemble de sommets et de triangles pour chaque maillage. Quelqu'un connaît-il un algorithme ou un endroit pour commencer à chercher (j'ai essayé Google d'abord mais je n'ai pas trouvé un bon endroit pour commencer) pour effectuer des opérations booléennes sur lesdites mailles et obtenir un ensemble de sommets et de triangles pour le maillage résultant? La soustraction et l'union sont particulièrement intéressantes.
Exemples d'images: http://www.rhino3d.com/4/help/Commands/Booleans.htm
la source
Je pense que nous pouvons le résoudre si nous y réfléchissons.
Vous souhaiterez évidemment créer des faces (triangles) à l'intersection des deux géométries. Il vous reste alors trois mailles: l'intersection que vous venez d'isoler, la géométrie 1 et la géométrie 2.
Ensuite, supprimez simplement ce dont vous n'avez pas besoin!
Je pense que ça le couvre, hein? La partie difficile serait évidemment de créer les faces d'intersection. Pour cela, parcourez chaque face de l'un et vérifiez si cette face fait partie de l'autre; s'il est totalement à l'intérieur, copiez la face dans le cadre du maillage d'intersection. S'il est partiellement à l'intérieur, vous devez diviser le triangle le long de la ligne d'intersection; Je pense que DirectX et OpenGL auraient tous les deux des fonctions d'aide pour cela, ou c'est juste un peu de calcul en avion 3D (vecteurs). J'ai appris ce genre de chose dans Calculus 3 (ou était-ce 2?) Mais si vous n'avez pas la moindre idée, demandez peut-être à math.stackexchange.com . Et puis bien sûr, si le visage est à l'extérieur, ne faites rien. Une fois que vous avez parcouru toutes les faces des deux maillages, vous resterez avec le maillage d'intersection.
la source
Si vous avez affaire à des modèles polygonaux, vous devrez peut-être vous occuper de la géométrie non multiple, ce qui signifie que la question de savoir ce qui est "à l'intérieur" et ce qui est "à l'extérieur" n'est pas définie. Il est difficile d'effectuer une opération booléenne si vous ne savez pas si vous avez un 0 ou un 1.
Vous devez également faire face à des cas marginaux tels que des polygones coplanaires, des polygones qui coupent des bords, des sommets qui se trouvent sur des bords et / ou des faces, et des choses de cette nature. Rien de tout cela n'est impossible, vous avez juste besoin d'une manière très robuste de représenter vos données de maillage, et d'une définition précise de ce que vous attendez dans ces cas.
la source
Il convient de noter que la plupart de vos opérations peuvent être représentées par la négation et l'union, où la négation d'une géométrie est simplement cette géométrie avec ses normales inversées. Donc, si vous pouvez réussir l'union, les autres opérations devraient simplement suivre:
Sander a quelques bons articles de blog qui discutent des implémentations CSG: http://sandervanrossen.blogspot.com/search/label/CSG
la source
C'est un sujet assez délicat, du moins si vous voulez le faire de manière robuste (la virgule flottante pose de sérieuses difficultés).
Je voudrais vous signaler la littérature sur la géométrie computationnelle / infographie sur le sujet, en particulier ces articles récents:
http://homes.cs.washington.edu/~gilbo/repofiles/booleans2009.pdf
http://openflipper.org/uploads/media/campen_2010_eg_02.pdf
la source