Dieser Artikel ist der 11. Tag von JavaFX Adventskalender 2017. Der 10. Tag ist HASUNUMA Kenjis aktueller Status des JavaFX-Maven-Plugins.
Ab diesem Sommer begann ich mit der Erstellung eines Programms zur dreidimensionalen Darstellung der Erdumlaufbahnen und künstlichen Satelliten mithilfe der 3D-Funktion von JavaFX. Wenn der heutige Adventskalender abgeschlossen ist, wird zunächst ein Bildschirm mit vielen Umlaufbahnen um die Erde angezeigt, der jedoch leider nicht abgeschlossen ist. Zur Darstellung der Satellitenumlaufbahn wird heute das Äquatorialkoordinatensystem hauptsächlich in der Satellitenumlaufbahn verwendet (rechtshändiges orthogonales Koordinatensystem mit dem Erdmittelpunkt als Ursprung, der Rotationsachse der Erde als Z-Achse und der Äquatorialebene als XY-Ebene). Einführung in die Definition und Anzeige der Erde.
Das Beispielprogramm zum Anzeigen der Erde durch 3D-Programmierung, dh das Einfügen einer Weltkarte auf eine Kugel mit einer Texturkarte und das Anzeigen als Erde, wird in der 3D-Grafikwelt häufig als Hello-Weltprogramm verwendet. Das folgende Beispiel zeigt eine mit JavaFX erstellte 3D-Erdanzeige.
Zuvor Grundlegendes zu JavaFX 3D zum Programmieren der Anzeige der Erde mit der 3D-Funktion von JavaFX. % E3% 82% 92% E7% 90% 86% E8% A7% A3% E3% 81% 99% E3% 82% 8B) Ich habe den Artikel geschrieben.
Zu diesem Zeitpunkt ist das JavaFX 3D-Koordinatensystem so, dass die Z-Achse die Tiefenrichtung des Bildschirms ist, die X-Achse die rechte Richtung des Bildschirms ist und die Y-Achse die untere Richtung des Bildschirms ist. Die JavaFX 3D-Anzeige ist die Welt, die von einer Kamera (perspektivische Kamera) aus gesehen wird, die in diesem Koordinatensystem platziert ist. Die Standardkamera mit Perspektive befindet sich am Ursprung und die Kamera ist positiv auf der Z-Achse ausgerichtet. Die folgende Abbildung zeigt die Position und Ausrichtung dieses Koordinatensystems und der Kamera.
Die Umlaufbahn des künstlichen Satelliten wird durch ein Koordinatensystem mit dem Erdmittelpunkt als Ursprung, der Rotationsachse der Erde als Z-Achse (positiv in Nordpolrichtung), der X-Achse in Richtung des Federverzweigungspunkts und der X- und Y-Achse in der Äquatorialebene dargestellt. Ich werde.
Dies ist das gleiche rechtshändige orthogonale Koordinatensystem wie die Hello World Earth-Anzeige zuvor, jedoch in einer anderen Ausrichtung.
Ich suchte nach einer Möglichkeit, das Modell (Erde) so anzuzeigen, dass sich der Nordpol der Erde oben auf dem Bildschirm befindet.
3D-Grafiken steuern die Position und Ausrichtung der Kamera, um die Anzeige frei zu ändern. Wenn Sie jedoch nicht mit 3D vertraut sind, versuchen Sie in der Regel, das Modell und die Achsen durch affine Transformation anzuzeigen, anstatt die Kamera zu steuern. Diesen Sommer habe ich Folgendes über die Textur-Map geschrieben (links und rechts gespiegelt, oben und unten gespiegelt usw.), als die Ausrichtung der Koordinatenachsen durch affine Konvertierung geändert wurde. JavaFX 3D-Texturabbildung und affine Konvertierung
Wenn Sie in JavaFX 3D angeben, dass die Ausrichtung der Koordinatenachsen durch affine Konvertierung geändert werden soll, ist auch die Texturabbildung betroffen.
Durch Ändern der Position und Ausrichtung der Kamera möchte ich die Z-Achse in der Bildschirmanzeige vertikal machen. Ich habe als nächstes darüber geschrieben. Informationen zum JavaFX 3D-Koordinatensystem und zur Kameraausrichtung
Um das obige Blog in einem Wort zusammenzufassen: Durch Drehen der Kamerarichtung um 90 Grad entlang der X-Achse wird die Z-Achse in vertikaler Richtung des Bildschirms angezeigt.
Dieser Bildschirm ist ein JavaFX-Programm, das die Position und Ausrichtung der Kamera so steuert, dass die Z-Achse in vertikaler Richtung des Bildschirms liegt, um die Erde anzuzeigen.
Mit dem Erdmittelpunkt als Ursprung werden die X-Achse, die Y-Achse und die Z-Achse mit roten, grünen und blauen Zylindern bzw. Kugeln an den positiven Endpunkten angezeigt. Außerdem werden die XY-Ebene, die YZ-Ebene und die ZX-Ebene im Drahtrahmen angezeigt. (Es ist ein wenig verwirrend)
Das Bedienfeld auf der rechten Seite verfügt über Bedienelemente, die die Position und Ausrichtung der Kamera steuern.
Dieses Programm wird derzeit in den folgenden Repositories aktiv entwickelt: https://github.com/torutk/javafx-satorbit
Das Folgende ist ein Auszug aus dem Code, der die Richtung der Kamera steuert.
SatelliteOrbits3dView.Java (Auszug)
private final Rotate azimuthRotate = new Rotate(0, Rotate.Y_AXIS); //Drehung der Kamera in Längsrichtung (um die Äquatorlinie)
private final Rotate elevationRotate = new Rotate(0, Rotate.X_AXIS); //Drehung der Kamera in Breitengradrichtung (um den Meridian)
private final Translate distanceTranslate = new Translate(0, 0, CAMERA_DISTANCE); //Kameradistanz
//Koordinatenkonvertierungszeichenfolge, die die Position und Ausrichtung der Kamera bestimmt
private final Transform[] cameraTransforms = new Transform[] {
new Rotate(-90, Rotate.X_AXIS), //Drehen Sie die Kamera so, dass die positive Richtung der Z-Achse auf dem Bildschirm angezeigt wird
azimuthRotate,
elevationRotate,
distanceTranslate
};
void rotationCamera() {
subScene.setCamera(createCamera(cameraTransforms));
}
//Erstellen Sie eine Kamera.
private PerspectiveCamera createCamera(Transform... args) {
PerspectiveCamera camera = new PerspectiveCamera(true);
camera.setFieldOfView(45.0);
camera.setFarClip(400);
camera.getTransforms().addAll(args);
return camera;
}
Hier haben wir eine Kamera, die immer zum Ursprung zeigt. Die Position und Richtung der Kamera werden durch Transformieren [] definiert. Erstellen Sie jedes Mal, wenn Sie die Kamera steuern (Position oder Richtung ändern), eine Kamera und stellen Sie sie in der Szene ein.
Ich möchte das nächste Mal eine detaillierte Erklärung geben.