Erdanzeige des äquatorialen Koordinatensystems in JavaFX 3D (1)

Erdanzeige des äquatorialen Koordinatensystems in JavaFX 3D (1)

Dieser Artikel ist der 11. Tag von JavaFX Adventskalender 2017. Der 10. Tag ist HASUNUMA Kenjis aktueller Status des JavaFX-Maven-Plugins.

Einführung

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.

Hallo Welt der 3D-Grafik

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. image.png

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.

image.png

Äquator-Koordinatensystem

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. image.png

Dies ist das gleiche rechtshändige orthogonale Koordinatensystem wie die Hello World Earth-Anzeige zuvor, jedoch in einer anderen Ausrichtung.

Ich möchte das im äquatorialen Koordinatensystem definierte Modell in derselben Ausrichtung anzeigen

Ich suchte nach einer Möglichkeit, das Modell (Erde) so anzuzeigen, dass sich der Nordpol der Erde oben auf dem Bildschirm befindet.

Wenn Sie die Koordinatenachsen mit der affinen Konvertierung ändern, lautet die Textur ...

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.

Kameraposition und -ausrichtung

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.

Zeigen Sie die Erde im äquatorialen Koordinatensystem an

image.png

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.

Recommended Posts

Erdanzeige des äquatorialen Koordinatensystems in JavaFX 3D (1)
Zeigen Sie ein Ladebild in JavaFX an und zeigen Sie dann ein anderes Bild an