Berechnung ob ein Polygon eine Box schneidet
-
Hallo!
Mein Kollisionssystem funktioniert relativ gut. Nur hat es einen kleinen Bug. Nämlich bei der Überprüfung ob eine Box ein Polygon schneidet. Ich überprüfte bisher zuerst ob eine der Drei Polygonseiten innerhalb der Box liegen. Wenn das nicht der Fall ist, überprüfe ich ob die Geraden vom Polygon A-B B-C C-A eine der 6 Ebenen der Box schneiden. Wenn nicht -> return false. Leider gibt es jedoch einen Fall indem ein Polygon eine Box schneidet, jedoch die zwei Bedingungen nicht erfüllt sind, und zwar dieser hier:................... . . . .... . . . . . . .... . . . . . . . . . .. .
Versteht ihr was ich meine? Wie könnte ich das überprüfen? Ich könnte überprüfen ob die Polygonebene einer der 6 Boxebenen schneiden und dann überprüfen ob der Schnittpunkt innerhalb des Polygons liegt. Ich will aber nicht noch mehr Performance verschenken wenn es auch einfacher geht.
Gibt es einfachere Methoden?
Gute Antworten wären super
Kevin
-
Ist das jetzt 3D? Oder hast du es schon auf 2D reduziert?
Bye, TGGC (Der Held ist zurück)
-
Es macht zwar eigentlich keinen großen Unterschied, aber nein ich bleibe bei 3D, was du wissen solltest da ich bereits gesagt habe dass ich etwas Angefangenes nicht aufgebe....
-
Aber das ist doch viel einfacher zu lösen, wenn man es auf ein zweidimensionales Problem reduziert! Also warum nicht? Woher soll ich wissen, das du es unnötig kompliziert haben möchtest?!
Ist denn die Box, wie es die Zeichnung andeutet immer parallel zum Dreieck? Na rück halt mal noch ein paar Details raus, evtl. ist es durch die (uns unbekannten) Randbedingungen ganz einfach.
Bye, TGGC (Der Held ist zurück)
-
Einfach ein beliebes Polygon und eine beliebige Box, 3D...nicht parallel, nix
-
Ok, du hast natürlich schon vorbildlich im Netz gesucht, aber wie immer gibts dort für dein Problem keine Lösung... Also Zerlegen wir das Problem mal:
a) schneide die Box mit der Ebene durch das Dreieck (Ergebnis=>Polygon)
b) schneide die beiden Polygone (Achso, das wolltest du ja nicht machen, wäre ja auf 2D reduziert, dumm, nicht? )Für beides solltest du nun im Netz suchen.
Bye, TGGC (Der Held ist zurück)
-
bist schon ein scherzkeks...
obwohl dein Weg doch ETWAS umständlich ist...
dieser ist doch wesentlich besser:wenn man alle 6 Ebenen der Box mit allen 3 Punkten des Polygons überprüft und nicht bei mindestens einer Ebene alle Punkte außerhalb der Ebene liegen gibt es eine Kollision. Besser, nicht?
-
Surkevin schrieb:
wenn man alle 6 Ebenen der Box mit allen 3 Punkten des Polygons überprüft und nicht bei mindestens einer Ebene alle Punkte außerhalb der Ebene liegen gibt es eine Kollision. Besser, nicht?
Wie soll das gehen?!?
Definierst Du "außerhalb" der Ebene mit "mathematisch nicht Teil der Ebene" oder mit "nicht innerhalb Deiner Box"??
Naja, ist sowieso Quatsch. Erläuter' das mal genauer plz!
-
Hm die Idee ist echt gut und einfach. Ist so ähnlich wie bei der Kollision von Rechtecken.
Für jede Ebene wird überprüft, ob alle Punkte des Dreiecks vor der Ebene liegen, d.h außerhalb der Box. Wenn das für nur eine der sechs Ebenen zutrifft gibt es keine Kollision, ansonsten schon.