Schnittmenge zwischen zwei Kästchen im 3D-Raum

Ich möchte ein Kollisionserkennungssystem für meine Grafik-Engine implementieren.

Ich weiß nicht, ob dies der übliche Weg ist, aber meine Idee war, ein festes Objekt (wie ein Netz oder eine Kamera) in eine 3D-Box einzubinden, was zu genaueren Ergebnissen führt als eine Kugel.

Dieses Feld wird durch acht Eckpunkte definiert

    x0 = min(vertices.x)-off   // parsing mesh's vertices for the minimum x
    y0 = min(vertices.y)-off
    z0 = min(vertices.z)-off
    x1 = max(vertices.x)+off   // off avoids 2D bounding on 2D objects
    y1 = max(vertices.y)+off
    z1 = max(vertices.z)+off
    boundingBox[0] = vec3(x0, y0, z0);
    boundingBox[1] = vec3(x0, y1, z0);
    boundingBox[2] = vec3(x1, y0, z0);
    boundingBox[3] = vec3(x1, y1, z0);
    boundingBox[4] = vec3(x0, y0, z1);
    boundingBox[5] = vec3(x0, y1, z1);
    boundingBox[6] = vec3(x1, y0, z1);
    boundingBox[7] = vec3(x1, y1, z1);

achdem ich den Begrenzungsrahmen in Weltkoordinaten umgewandelt habe, suche ich nach einer Möglichkeit, um zu überprüfen, ob es eine Schnittmenge zwischen zwei von ihnen gibt, aber ich weiß nicht, wie ich das mit linearer Algebra machen sol

Ich dachte, wenn ich sicher wäre, dass alle Kästchen parallel zur XZ-Ebene liegen, könnte ich einfach alle Eckpunkte von Kästchen1 mit den Min / Max-Koordinaten von Kästchen2 vergleichen:

for(int i = 0; i < 8; i++) {
    if(box1[i].x >= box2.minX && box1[i].x <= box2.maxX) &&
      (box1[i].y >= box2.minY && box1[i].y <= box2.maxY) &&
      (box1[i].z >= box2.minZ && box1[i].z <= box2.maxZ) {
        // collision here
    }
}

Aber dies wird nicht funktionieren, da die Maschen möglicherweise gedreht wurden. Gibt es eine mathematische Formel, die ich verwenden kann?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage