eine Reihe von Eckpunkten und Dreiecken für jedes Netz gegeben. Kennt jemand einen Algorithmus oder einen Ort zum Suchen (ich habe zuerst Google ausprobiert, aber keinen geeigneten Ort gefunden, um zu beginnen), um boolesche Operationen an den Netzen durchzuführen und eine Reihe von Eckpunkten und Dreiecken für das resultierende Netz zu erhalten? Von besonderem Interesse sind Subtraktion und Vereinigung.
Beispielbilder: http://www.rhino3d.com/4/help/Commands/Booleans.htm
quelle
Ich denke, wir können es rätseln, wenn wir nur darüber nachdenken.
Sie möchten offensichtlich Flächen (Dreiecke) erstellen, in denen sich die beiden Geometrien schneiden. Dann bleiben Ihnen drei Maschen: der Schnittpunkt, den Sie gerade isoliert haben, Geometrie 1 und Geometrie 2.
Dann löschen Sie einfach, was Sie nicht brauchen!
Ich denke, das deckt es ab, oder? Das Schwierigste wäre natürlich, die Schnittflächen zu erstellen. Durchlaufen Sie dazu jedes Gesicht des einen und prüfen Sie, ob dieses Gesicht Teil des anderen ist. Wenn es sich vollständig innerhalb befindet, kopieren Sie die Fläche als Teil des Schnittgitters. Wenn es teilweise innen liegt, müssen Sie das Dreieck entlang der Schnittlinie teilen. Ich denke, DirectX und OpenGL hätten beide Hilfsfunktionen dafür, oder es ist nur eine 3D-Ebenenmathematik (Vektoren). Ich habe so etwas in Kalkül 3 gelernt (oder war es 2?), Aber wenn Sie keine Ahnung haben, fragen Sie vielleicht unter math.stackexchange.com . Und wenn das Gesicht draußen ist, dann tun Sie natürlich nichts. Sobald Sie alle Flächen beider Netze durchlaufen haben, bleibt das Schnittgitter erhalten.
quelle
Wenn Sie mit polygonalen Modellen arbeiten, müssen Sie sich möglicherweise mit nicht-vielfältiger Geometrie befassen, was bedeutet, dass die Frage, was "innen" und was "außen" ist, nicht definiert ist. Es ist schwierig, eine boolesche Operation auszuführen, wenn Sie nicht wissen, ob Sie eine 0 oder eine 1 haben.
Sie müssen sich auch mit Randfällen wie koplanaren Polygonen, Polygonen, die Kanten schneiden, Scheitelpunkten, die auf Kanten und / oder Flächen liegen, und Dingen dieser Art befassen. Nichts davon ist unmöglich, Sie brauchen nur eine sehr robuste Art der Darstellung Ihrer Maschendaten und eine genaue Definition dessen, was Sie in diesen Fällen erwarten.
quelle
Es ist erwähnenswert, dass die meisten Ihrer Operationen durch Negation und Vereinigung dargestellt werden können, wobei die Negation einiger Geometrie nur die Geometrie ist, deren Normalen umgekehrt sind. Wenn Sie also die Gewerkschaft in Ordnung bringen können, sollten die anderen Operationen einfach folgen:
Sander hat einige ziemlich gute Blog-Posts, die CSG-Implementierungen behandeln: http://sandervanrossen.blogspot.com/search/label/CSG
quelle
Dies ist ein ziemlich kniffliges Thema, zumindest wenn Sie es robust machen möchten (Gleitkomma verursacht einige ernsthafte Schwierigkeiten).
Ich möchte Sie auf die Literatur zu Computergeometrie / Computergrafik zu diesem Thema hinweisen, insbesondere auf die folgenden Veröffentlichungen:
http://homes.cs.washington.edu/~gilbo/repofiles/booleans2009.pdf
http://openflipper.org/uploads/media/campen_2010_eg_02.pdf
quelle