M1 - Images
2007-2008
TD 1 - Transformations
Partie 1 : échauffement en 2D
On souhaite afficher un "mini" système
solaire composé du soleil et de la terre. La terre est
placée autour du soleil en fonction du jour de
l'année et son orientation dépend de l'heure de la
journée (entre 0 et 24h).
Dans un premier temps, on se contentera d'un
affichage statique. De même, afin de simplifier la mise en route,
on supposera que le soleil est au centre de l'univers ... c'est
à dire aux coordonnées (0, 0) dans un plan 2D.
Q1: Comment décrire la position et l'orientation de la terre par rapport au soleil ?
Q2: Comment composer les différentes
transformations nécessaires ? Quel type de vecteur permet de le
faire facilement ?
Q3: Ecrivez une fonction qui affiche la terre
dont la position et l'orientation sont passées en
paramètres :
void terre_afficher(float jour, float heure);
Vous pouvez vous aider de sdlkit pour
réaliser l'affichage et structurer votre programme. La documentation est en annexe.
A ne pas manquer :
Q4: Animez votre système solaire et
vérifiez que la terre peut bien s'orienter indépendament
de sa position autour du soleil.
Vous pouvez modifier la fonction keyboard afin de rendre l'affichage interactif (cf. annexe).
Partie 2 : il manque un D ?? (ou 2)
On souhaite maintenant choisir le point de vue
permettant d'observer la "scène". Le "Système solaire"
peut être représenté en 3D par le plan XZ.
Q1: Comment définir une caméra ?
Q2: Comment la positionner dans la scène ?
Q3: Comment représenter simplement ces
différentes transformations (et calculer la position des points
de la scène sur l'écran) ?
Q4: Y-a-t-il d'autres problèmes ??
Q5: Modifiez votre programme afin de pouvoir
observer le système solaire depuis n'importe quel point de vue.
Question subsidiaire : qu'est ce qu'une caméra (réellement) ?
Q6: Comment déplacer interactivement la
caméra afin d'observer la scène ? Existe-t-il plusieurs
solutions ? Pourquoi ?
Question subsidiaire : identifiez dans votre
programme les différentes étapes du pipeline graphique
...
Annexe : sdlkit
Installation de sdlkit (seul)
Téléchargez sdlkit
créez un répertoire et dézippez l'archive dedans
cd <répertoire>
tar -zxvf sdlkit_latest.tar.gz
make
make install
si vous souhaitez installer les exemples :
cd tests
tar -zxvf sdlkit_tests_latest.tar.gz
make
application minimale :
#include "sdlkit.h"
int main(void)
{
/* creation de la fenetre / contexte openGL */
sdlkit_init(600, 600); // 600 x 600
/* tant que la fenetre existe ... */
while(!sdlkit_stop())
{
sdlkit_events(); // gerer les evenements systemes
sdlkit_anime(); // limiter la vitesse d'affichage
/* gestion du clavier */
unsigned char *keys= sdlkit_get_keys();
if(keys[SDLK_q] || keys[SDLK_ESCAPE])
// sortir en appuyant sur Q ou ESC
sdlkit_send_stop();
/* affichage */
... à compléter
}
sdlkit_quit();
return 0;
}
La liste des symboles correspondants aux touches du clavier sont dans le SDL Programming Guide. L'état des touches "mortes" (shift, alt, ctrl, etc.) est donné par SDL_GetModState().