M1 - Images
2007-2008

TD 1 - Transformations


Partie 1 : échauffement en 2D

figure


    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 :
openGL Programming Guide
openGL man pages

liens sur la programmation openGL


    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().