Ich experimentiere mit LWJGL2 und ich möchte in der Lage sein zu sagen, ob die Kamera in der Lage ist, einen bestimmten Punkt in 3D-Raum zu sehen. Ich habe mich selbst versucht, um zu sehen, ob ich es schaffen könnte, und bin mit etwas fertig geworden, das irgendwie funktioniert und nur für die Rotation auf der Y-Achse.Berechnung von Punkten Sichtbarkeit im 3D-Raum
Dieser Code funktioniert, aber nicht in beiden Achsen. Ich bin mir nicht sicher, ob dies auch der richtige Weg ist.
public boolean isInFrame(float x, float y, float z){ //The z isn't used
float camera = rotation.y; //The cameras y rotation
double object = Math.atan2(y, x)*(180/Math.PI);
object += (180 - camera);
if (object <0) object += 360;
if (object >360) object -= 360;
return 270>object&&90<object; //set to 180˚ for test
}
Für den Code gehe ich davon aus, dass die Kamera um 0,0,0 zentriert ist.
Ich möchte nur wissen, wie ich das ändern könnte, so dass es für x und y-Drehung der Kamera funktioniert. Zum Beispiel könnte es mir sagen, wenn ein Punkt unabhängig von der Rotation der Kamera sichtbar ist.
HINWEIS: Ich mache mir keine Sorgen über irgendetwas, das die Sicht auf den Punkt behindert.
Vielen Dank für die Hilfe im Voraus.
wow, das vereinfacht alles, was ich tat, vielen Dank! –
Ich verstehe, was du hier sagst, aber ich bin mir nicht sicher, ob ich weiß, wie man die Ansichts- und Projektionsmatrizen von LWJGL2 bekommt. In LWJGL2 definieren Sie es nur so: 'glMatrixMode (GL_PROJECTION); gluPerspective ((float) 100, 640f/480f, 0.01f, 100); ' Wie bekomme ich die rohe Matrix daraus? –
Ich bin nicht besonders mit LWJGL vertraut. In einfachem OpenGL ist der Zustand des Matrixstapels über z.B. 'glGetFloatv (GL_MODELVIEW_MATRIX, ...)' und 'glGetFloatv (GL_PROJECTION_MATRIX, ...)', die Arrays von 16 Floats zurückgeben. – jsb