Überprüfen Sie jede einzelne Ebene des AABB mit der anderen AABB. Wenn eine Ebene den AABB des anderen Objekts schneidet, die gegenüberliegende Ebene jedoch nicht, wissen Sie, dass diese Ebene an der Kollision beteiligt ist. Wenn beide gegenüberliegenden Flächen den anderen AABB schneiden, befindet sich das Objekt entlang dieser Achse vollständig im anderen und die Kollisionsrichtung ist mehrdeutig / undefiniert.
In der Praxis sind dies dieselben Überprüfungen, die verwendet werden, um festzustellen, ob AABBs kollidieren. Sie sollten also in der Lage sein, zu bestimmen, welche Flächen bei der AABB-Kollisionsprüfung mit geringen zusätzlichen Kosten kollidieren.
Wenn wir uns das Beispiel ansehen, sehen wir Folgendes:
- Die yz + -Ebene der Kugel schneidet das Prisma, yz- jedoch nicht. Kugel yz + kollidiert. In ähnlicher Weise kollidiert das yz des Prismas.
- Sowohl das Prisma xy- als auch das xy + befinden sich innerhalb des xy- und xy + der Kugel. Das Prisma befindet sich in z-Richtung vollständig innerhalb der Kugel. Kollision ist mehrdeutig.
- Sowohl das Prisma xz- als auch das xz + befinden sich innerhalb des xz- und xy + der Kugel. Das Prisma befindet sich in y-Richtung vollständig innerhalb der Kugel. Kollision ist mehrdeutig.
In diesem Beispiel erkennen wir also eine Kollision zwischen der Kugel yz + und dem Prisma yz-.
Die Normalen aller Gesichter sollten offensichtlich sein (yz + hat (1,0,0), yz- hat (-1,0,0), xz- hat (0, -1,0) ...) Im Allgemeinen, wenn Ein Quad hat die Eckpunkte (a, b, c, d) gegen den Uhrzeigersinn, dann können Sie die Normalen mit (ba) .cross (cb) berechnen.
Beachten Sie, dass dieses Problem die Möglichkeit mehrerer Kollisionen bietet: Abhängig von der Positionierung können Kollisionen in allen drei Achsen auftreten. Ich denke, diese „Mehrdeutigkeit“ ist ziemlich inhärent, und wie Sie sie lösen, liegt wirklich bei Ihnen. Sie können einfach den Durchschnitt der einzelnen Normalen nehmen. Sie können den Schnittbereich in jeder Ebene finden und dann die Normale auswählen, die der größten Fläche entspricht, oder die Bereiche verwenden, um den Durchschnitt der Normalen zu gewichten. Sie können die Eindringtiefe entlang jeder Achse ermitteln und die Normale auswählen, die dem flachsten (oder tiefsten) Eindringen entspricht. Usw. usw.