Ich baue ein Spiel in OpenGL. Das Spiel besteht aus einem Flugzeug, das frei in einer 3D-Welt fliegt und durch bestimmte Bereiche fliegen muss, als würde es durch Fenster fliegen. Im Moment versuche ich, die Kollision des Flugzeugs mit diesen "Fenstern" zu berechnen. Ich dachte als ersten Ansatz daran, ein Sweep-AABB für die Flugbahn des Flugzeugs zu haben und einige AABBs für jedes Fenster, so dass, wenn sich diese AABBs überschneiden, potenzielle Fälle von Durchflügen des Flugzeugs vorhanden sind. Aber das Problem beginnt, wenn ich versuche, die AABBs zu berechnen, da jeder Algorithmus, den ich kenne, die Koordinaten beider Objekte (Flugzeug+Fenster) im selben Bezugssystem kennen muss. Mein Programm zeichnet die Welt so, als ob sie sich bewegen würde, anstatt das Flugzeug, das immer im Ursprung zentriert ist (eigentlich bei z=-10, also wird es gerendert). Das eigentliche Problem ist, wie man die Koordinaten jedes "Fensters" berechnet, wie sie aus dem Flugzeug gesehen werden. Dies ist der Code, den ich zum Zeichnen der Szene verwende:
glLoadIdentity();
//das sind die Rotationen des Flugzeugs auf dem Boden
glRotatef(RotHorizont, 0.0f, 0.0f, 1.0f);
glRotatef(-directionX, 1.0f, 0.0f, 0.0f);
glRotatef(-directionY, 0, 1.0f, 0);
//und das sind die Bewegungen des Flugzeugs
//(die Multiplikation mit 0.0174532925f dient der Umrechnung der Winkel in Radianten
Tx -= (float)Math.sin(directionY * 0.0174532925f) * velocity;
Tz -= (float)Math.cos(directionY * 0.0174532925f) * velocity;
Ty -= (float)Math.sin(directionX * 0.0174532925f) * velocity;
glTranslatef(-Tx, Ty, -Tz);
/*
hier zeichne ich den Boden und die Fenster
*/
....
//und jetzt zeichne ich das Flugzeug
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -10.0f);
/* zeichne das Flugzeug */
Also, wie zum Teufel bekomme ich die Koordinaten der "Fenster"? Oder gibt es einen anderen Weg, die Kollision zu berechnen? Ich brauche wirklich eure Hilfe, ich werde es sehr schätzen. Vielen Dank an alle!