M2PRO - Images
Année 2007-2008

    TP 1 - Opérations et Vertex Shaders



big guy
(image et modèle disponible dans le SDK nvidia)


Préambule

    Téléchargez et installez les libraries objtoy et sdlkit fournies en Annexes.
    Vérifiez le bon fonctionnement du sdlkit_testmain et de glsl_testmain.

    Documentation :

    openGL Programming Guide

    openGL Shading Language Specification

    openGL man pages
    GLSL quick reference guide

    libSDL Programming Guide


Partie 1 : Opérations

    Reprenez le TP1 du premier semestre et ré-organisez son code proprement en utilisant sdlkit. Les étapes suivantes doivent clairement apparaître :

    initialisation et création du contexte openGL
    boucle d'affichage :
       effacer le buffer de rendu
       placer et orienter la camera
       fixer la projection (en fonction de la largeur et de la hauteur de la fenetre)
       placer, orienter et afficher chaque objet
       échanger les buffers de rendu et d'affichage
    sortie


Partie 2 : Vertex Buffer Objects

    Construisez un objet simple, cube, cylindre ou sphère, par exemple, en stockant sa forme et les attributs de ses sommets dans un vertex buffer object. Dans un premier temps, on se contentera de construire une liste de triangles.

    Construisez une liste de triangles indexés.


    Documentation openGL
    spécification de l'extension openGL : vertex_buffer_objects,  cf. les exemples à la fin du texte.

    tutorial ozone3d : utilisation des vertex buffer objects (français)


Partie 3 : Mon premier vertex shader

    On souhaite animer un point dont on connait la position de départ et celle d'arrivée. La solution consiste à interpoler la position du point entre sa position de départ et sa position d'arrivé, en fonction du temps.

    A l'instant t0, le point se trouve en x0, à l'instant t1, le point devra se trouver en x1.
    Connaissant t (compris entre t0 et t1), comment déterminer la position x du point ?

    Ecrivez le vertex shader permettant de réaliser cette animation.
    Quels paramètres doit connaitre le shader ? Comment les lui transmettre ?
    Ecrivez l'application utilisant le shader.



    Voici le vertex shader minimal :

// simple.vsl : vertex shader minimal
void main(void)
{
    gl_Position= gl_ModelViewProjectionMatrix * gl_Vertex;
}

    Que faut-il ajouter pour l'utiliser ?

glsl_init()
program= glsl_program_init("simple.vsl", "simple.fsl");
if(program==0)
        return -1;
/* active le programme */
glUseProgram(program);


et glsl_quit() à la fin du programme avant sdlkit_quit().



Annexe : utilitaires

Installation de sdlkit

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 :
créez un répertoire tests dans le répertoire sdlkit et dézippez l'archive dedans
cd tests
tar -zxvf sdlkit_tests_latest.tar.gz
make

Installation de objtoy

Téléchargez objtoy

créer un répertoire et dézippez l'archive dedans
cd <répertoire>
tar -zxvf objtoy_latest.tar.gz
make
make install