TP3 : Système solaire On se propose de visualiser le mouvement (très simplifié) de quelques planètes du système solaire. Le centre du système solaire sera situé à l’origine et les planètes seront animées par deux mouvements de rotation : - la rotation sur elles-mêmes (autour de Y) - l’orbite assimilée à un cercle dans le plan XOZ Les valeurs ci-dessous ne sont pas « réalistes » mais permettront d’obtenir une visualisation pédagogique des mouvements planétaires. Soleil Vénus Terre Mars Lune couleur jaune brune bleue rouge gris diamètre 40 11 12 6 4 rotation fixe 1.5°/ut 28°/ut 28°/ut 1°/t distance 0 100 150 230 15/terre révolution fixe 1.7°/ut 1°/ut 0,6°/ut 1°/ut Le temps sera une variable globale TU (temps universel) initialisée à 0 et qui sera incrémentée (ut=unité de temps) en appuyant sur la touche <entrée> (on obtiendra une animation en conservant la touche <entrée> enfoncée). Chaque planète sera représentée par une fonction de tracé qui oriente et positionne la planète sur l’orbite en fonction de la valeur de TU. On pourra « naviguer » dans ce système solaire avec les 4 flèches. Les menus permettront de modifier le contexte d’affichage (plein/arrête, etc. au choix de votre imagination). 1 - Tracé d’une sphère. Méthode : - Définir le type Point3D comme un tableau de 3 flottants (les 3 coordonnées) - Définir deux constantes de 32 Parallèles et 64 Méridiens - Déclarer une matrice sphere[Parallèles][Méridiens] - Initialiser la matrice avec les sommets se trouvant à chaque intersection d’un méridien et d’un parallèle pour une sphère de rayon 1 (dans le cas des pôles, il y aura 64 fois les mêmes coordonnées). - On dispose maintenant d’une sphère « discrète » que l’on se propose de tracer en l'approximant par des quadrilatères. Pour cela, considérez chaque quadruplet de sommets voisins comme un quadrilatère et tracez-le - On obtient une sphère à facettes (utilisez une représentation fil de fer dans un premier temps pour contrôler le résultat) - Il suffira d’une homothétie pour adapter cette sphère au diamètre d’une planète. Pour gérer un éclairage, il faut définir une normale en chaque sommet. Il se trouve que, dans le cas de la sphère unité centrée sur l’origine, les coordonnées de chaque sommet (point 3D) sont aussi ceux de la normale de longueur 1 (vecteur reliant l’origine au sommet) - On pourra utiliser la matrice sommet[Parallèles][Méridiens] comme matrice des normales - Comme on appliquera une homothétie pour chaque planète, il faudra activer : glEnable(GL_NORMALIZE) - On pourra aussi utiliser un modèle de rendu lissé pour le tracé de la sphère : glShadeModel(GL_SMOOTH) Dans un premier temps, on prendra un matériau simple (par exemple bleuté pour la terre et gris pour la lune) et on pourra placer un éclairage à droite de la caméra pour en tester le rendu. 2 – Système terre-lune. Le but est de dessiner la terre centrée sur l’origine et en rotation sur elle même à raison de 30° par unité de temps pour simuler l’écoulement d’un jour (12*ut = 1 jour). Dans cette étape, la lune reste fixe à une distance relative à la terre de 20 sur l’axe X. En utilisant votre fonction dessinerSphere, écrivez la fonction systemeTerreLune(float ut) qui trace le système terre lune dans une telle position. ut*30° X 20 Z Remarque : Le rendu de la terre sera fait dans un premier temps avec un matériau homogène. Aussi, la rotation de la terre ne sera visible qu’en tracé « fil de fer ». La suite du TP consistera à plaquer l’image de la terre avec les océans et continents et rendra visible cette rotation en rendu « plein ». 3 – Placage de texture Sur le lien jeux d’images de http://www.lsis.org/bulotr/gii , récupérez les 2 images de la terre et de la lune et plaquez les en mélangeant ces textures avec le rendu éclairage d’un matériaux blanc. Un complément « fichiersImage.c » est disponible sur le site pour lire des images au format pgm ou ppm et pour créer une structure de données capable de stocker ces images (voir description dans le fichier). L’image sera chargée dans une matrice où les cases sont des GLubyte (octets non signés) : 4 – Système solaire a) On souhaite maintenant positionner le système terre-lune en orbite autours du soleil. Ce système terre-lune est soumis à deux rotations : - Une rotation autours d’un axe se trouvant non pas au centre de la terre, mais à la distance 6 de ce centre (point rouge dans le schéma ci-dessous) et à raison de 13° par unité de temps (simulation du mois lunaire) - Par ailleurs, le système terre lune est en orbite à une distance de 100 par rapport au soleil (origine) avec une vitesse de révolution de 1° par unité de temps (simulation du positionnement annuel). En utilisant la fonction systemeTerreLune construisez la scène illustrant ce système en mouvement autours du soleil. ut*13° 100 ut*1° b) placez les autres planètes en orbite autours du soleil Remarque : Pour simuler l’éclairage des planètes par le soleil, on mettra une lumière à l’origine de la scène. Toutefois, il faudra aussi ajouter temporairement une lumière extérieure pour éclairer la sphère soleil le temps du tracé de celle-ci (sinon, le rendu du soleil donnera la sensation d’un disque plat)