Wie kann ich nach einer Verformungsoperation an Polygonen nach invertierten Polys suchen und diese reparieren?

7

Ich mache eine schnelle und schmutzige automatisierte Verformungsroutine an einem Polygonkörper. Wenn es ein Baum wäre und meine Achse in der Mitte des Baumes wäre, würde ich den Körper gerne biegen, indem ich die Achse biege. Ich würde einen einfachen Einflussalgorithmus verwenden, um die xyz-Verschiebung des Scheitelpunkts zu bestimmen.

Wie kann ich auf der konkaven Seite der Biegung nach überlappenden oder durchlaufenden Polygonen suchen und wie kann ich solche Polygone reparieren?

Vielen Dank!

Grobe Illustration des Konzepts

user3531082
quelle
Könnten Sie vielleicht ein Beispielnetz hinzufügen und wie es transformiert wird? Wenn Sie tatsächlich die Scheitelpunkte verschieben , nicht die einzelnen Polygone, bin ich mir nicht sicher, warum sie sich bei einem einfachen Biegevorgang gegenseitig passieren würden. Sollten die Polygone auf der konkaven Seite nicht etwas schrumpfen?
Martin Ender
@ MartinBüttner Durch den Klang wird er / sie ein ähnliches Problem bekommen wie Versatzkurven, wenn der Versatz den Krümmungsradius überschreitet. zB Blick auf die innere Reihe von grünen Kurven , die von der rot zu weit verschoben worden.
Simon F
Mir scheint, die Betreffzeilen fragen nach der Neuberechnung von Normalen, während der Körper nach der Selbstüberschneidung fragt.
Joojaa
1
Es tut mir leid, mein Thema und mein Körper sind nicht kohärent. Dies liegt daran, dass ich nicht sicher bin, welche Terminologie genau verwendet werden soll. Ich denke, Simon F hat meine Frage so interpretiert, wie ich es beabsichtigt hatte. Ich muss herausfinden, wie ich mit der Situation umgehen soll, in der der Versatz den Krümmungsradius überschreitet. Ich werde kurz eine Skizze hochladen.
user3531082
Ah ja, es gibt wirklich nichts, was Sie gegen diese Art von Dingen tun können, außer sich nicht zu sehr zu verbiegen.
Jojaja

Antworten:

2

Wenn Sie ein orientiertes Dreiecksnetz haben (eine nicht orientierte Oberfläche wäre beispielsweise der Möbius-Streifen ), können Sie die Dreiecksinversion überprüfen, indem Sie den signierten Bereich der Dreiecke betrachten . Der vorzeichenbehaftete Bereich ist positiv, wenn die Scheitelpunkte in CCW-Reihenfolge vorliegen, und negativ, wenn sie in CW-Reihenfolge vorliegen. Wenn Ihre Dreiecksscheitelpunkte alle im Uhrzeigersinn sortiert sind, werden alle Dreiecke mit negativer Fläche invertiert. Die Korrektur hängt von der Verformungstechnik ab. Ich kenne Ihren Fall nicht.

Das Überprüfen der Selbstüberschneidung ist aufwändiger. Sie sollten die Kollisionserkennung des Netzes tatsächlich mit sich selbst durchführen. Die Kollisionserkennung ist schnell, es müssen jedoch geeignete Datenstrukturen wie AABB Tree implementiert werden, um die Anzahl der Dreieck-Dreieck-Schnittpunkttests einzugrenzen. Die Kollisionserkennung wird normalerweise mit einer sehr Low-Poly-Version der Netze durchgeführt. In einigen Computerspielen ist die Grenzvolumenhierarchie (Kugeln, AABBs usw.), die sich dem Netz annähert, das einzige, was für eine Kollision in Betracht gezogen wird, nicht das Netz selbst.

Sobald eine Kollision erkannt wird, gibt es verschiedene Möglichkeiten, um zu reagieren, beispielsweise das Aufbringen einer Rückprallkraft.

Mauricio Cele Lopez Belon
quelle