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!
algorithm
3d
transformations
mesh
computational-geometry
user3531082
quelle
quelle
Antworten:
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.
quelle