Cet article est le 11ème jour du Calendrier de l'Avent JavaFX 2017. Le 10ème jour est le [Statut actuel de JavaFX-Maven-Plugin] de HASUNUMA Kenji (http://www.coppermine.jp/docs/notepad/2017/12/javafx-maven-plugin.html).
A partir de cet été, j'ai commencé à faire un programme pour afficher les orbites de la Terre et des satellites artificiels en trois dimensions en utilisant la fonction 3D de JavaFX. S'il est terminé, le calendrier de l'Avent d'aujourd'hui commencera par présenter un écran montrant de nombreuses orbites autour de la terre, mais malheureusement il n'est pas terminé. Aujourd'hui, pour afficher l'orbite du satellite, le système de coordonnées équatoriales principalement utilisé dans l'orbite du satellite (système de coordonnées orthogonales à droite avec le centre de la terre comme origine, l'axe de rotation de la terre comme axe Z et le plan équatorial comme plan XY) Présentation de la définition et de l'affichage de la terre.
L'exemple de programme d'affichage de la terre par programmation 3D, c'est-à-dire coller une carte du monde sur une sphère avec une carte de texture et l'afficher comme la terre, est souvent utilisé comme programme Hello world dans le monde graphique 3D. Voici un exemple d'affichage de la Terre 3D créé avec JavaFX.
Précédemment Understanding JavaFX 3D sur la façon de programmer pour afficher la Terre avec la fonction 3D de JavaFX. % E3% 82% 92% E7% 90% 86% E8% A7% A3% E3% 81% 99% E3% 82% 8B) J'ai écrit l'article.
À ce stade, le système de coordonnées JavaFX 3D est tel que l'axe Z est la direction de la profondeur de l'écran, l'axe X est la bonne direction de l'écran et l'axe Y est la direction du bas de l'écran. L'affichage JavaFX 3D est le monde vu depuis une caméra (caméra en perspective) placée dans ce système de coordonnées. La caméra en perspective par défaut est située à l'origine et la caméra est orientée positivement sur l'axe Z. La figure suivante montre la position et l'orientation de ce système de coordonnées et de cette caméra.
L'orbite du satellite artificiel est représentée par un système de coordonnées avec le centre de la terre comme origine, l'axe de rotation de la terre comme axe Z (positif dans la direction du pôle nord), l'axe X dans la direction du point de ramification du ressort et les axes X et Y dans le plan équatorial. Je vais.
Il s'agit du même système de coordonnées orthogonales droitier que celui affiché précédemment par Hello world Earth, mais dans une orientation différente.
J'ai cherché un moyen d'afficher le modèle (la terre) pour que le pôle nord de la terre soit en haut de l'écran.
Les graphiques 3D contrôlent la position et l'orientation de la caméra pour modifier librement l'affichage, mais si vous n'êtes pas familier avec la 3D, vous avez tendance à essayer d'afficher le modèle et les axes par transformation affine au lieu de contrôler la caméra. Cet été, j'ai écrit l'état de la texture map (retourné gauche et droite, haut et bas inversé, etc.) lorsque la direction des axes de coordonnées a été modifiée par conversion Affine. Mappage de texture JavaFX 3D et conversion Affine
Dans JavaFX 3D, si vous spécifiez de modifier l'orientation des axes de coordonnées par conversion Affine, la texture de la texture sera également affectée.
En changeant la position et l'orientation de la caméra, je voudrais rendre l'axe Z vertical dans l'affichage à l'écran. J'ai écrit à ce sujet ensuite. À propos du système de coordonnées 3D JavaFX et de l'orientation de la caméra
Pour résumer le blog ci-dessus en un mot, en tournant l'orientation de la caméra de 90 degrés le long de l'axe X, l'axe Z sera affiché verticalement sur l'écran.
Cet écran est un programme JavaFX qui contrôle la position et l'orientation de la caméra afin que l'axe Z soit dans la direction verticale de l'écran pour afficher la terre.
Avec le centre de la terre comme origine, les axes X, Y et Z sont représentés avec des cylindres et des sphères rouges, verts et bleus aux extrémités positives, respectivement. De plus, le plan XY, le plan YZ et le plan ZX sont affichés en fil de fer. (C'est un peu déroutant)
Le panneau de commande sur la droite a des commandes qui contrôlent la position et l'orientation de la caméra.
Ce programme est actuellement en cours de développement actif dans les référentiels suivants: https://github.com/torutk/javafx-satorbit
Ce qui suit est un extrait du code qui contrôle la direction de la caméra.
SatelliteOrbits3dView.java (extrait)
private final Rotate azimuthRotate = new Rotate(0, Rotate.Y_AXIS); //Rotation de la longitude de la caméra (autour de l'équateur)
private final Rotate elevationRotate = new Rotate(0, Rotate.X_AXIS); //Rotation de la caméra dans le sens de la latitude (autour du méridien)
private final Translate distanceTranslate = new Translate(0, 0, CAMERA_DISTANCE); //Distance de la caméra
//Chaîne de conversion de coordonnées qui détermine la position et l'orientation de la caméra
private final Transform[] cameraTransforms = new Transform[] {
new Rotate(-90, Rotate.X_AXIS), //Faites pivoter la caméra de sorte que la direction positive de l'axe Z soit sur l'écran
azimuthRotate,
elevationRotate,
distanceTranslate
};
void rotationCamera() {
subScene.setCamera(createCamera(cameraTransforms));
}
//Créez une caméra.
private PerspectiveCamera createCamera(Transform... args) {
PerspectiveCamera camera = new PerspectiveCamera(true);
camera.setFieldOfView(45.0);
camera.setFarClip(400);
camera.getTransforms().addAll(args);
return camera;
}
Ici, nous avons une caméra qui fait toujours face à l'origine. La position et la direction de la caméra sont définies par Transform []. Chaque fois que vous contrôlez la caméra (changez la position ou la direction), créez une caméra et placez-la dans la scène.
Je voudrais donner une explication détaillée la prochaine fois.