IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Explication de code simple


Sujet :

OpenGL

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Points : 164
    Points
    164
    Par défaut Explication de code simple
    (re)Bonjour a tous

    Je suis entrain de me remetre dans openGL et je m'apercois qu'il me manque pas mal de notions de bases que j'avais oculté jusqu'a présent ! Mais bon ... il n'est jms trop tard ^^
    En fait voici une portion de code issu d'un tutorial sur la création de font .
    C'est la fonction qui sert a placer le texte fraichement créer a l'ecran .
    Je vais tenter de l'expliquer ...a ous de me dire si je suis a coté de la plaque ou pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    void Move2dText(int x, int y) 
    { 
    glPushAttrib(GL_TRANSFORM_BIT | GL_VIEWPORT_BIT); 
     
    glMatrixMode(GL_PROJECTION); 
    glPushMatrix(); 
    glLoadIdentity(); 
     
    glMatrixMode(GL_MODELVIEW); 
    glPushMatrix(); 
    glLoadIdentity(); 
     
    y = 480 - FONT_HEIGHT - y; 
     
    glViewport(x-1, y-1, 0, 0); 
     
    glRasterPos4f(0, 0, 0, 1); 
     
    glPopMatrix(); 
    glMatrixMode(GL_PROJECTION); 
    glPopMatrix(); 
     
    glPopAttrib(); 
    }
    On commence par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glPushAttrib(GL_TRANSFORM_BIT | GL_VIEWPORT_BIT);
    Cette fonction va servir a faire des changement temporaire sur la matrice de pojection(<-- ?? chui pas sur de moi la ??) et le viewport .
    Ces changement ne seront effectif que entre cette ligne et la lgne final :
    Ensuite, nous avons un groupe de ligne + ou - similaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    glMatrixMode(GL_PROJECTION); 
    glPushMatrix(); 
    glLoadIdentity(); 
     
    glMatrixMode(GL_MODELVIEW); 
    glPushMatrix(); 
    glLoadIdentity();
    On va
    -selectionner la matrice de projection en tant que matrice courante
    -empiler cette matrice
    -"reset" cette matrice

    -selectionner la matrice de "modelisation" en tant que matrice courante
    -empiler cette matrice
    -"reset" cette matrice

    -> bilan : la matrice sur laquelle on travaille est la derniére selectionner ( modelvieuw ),
    Et les changement effectuer sur ces 2 matrice ne seront effectif qu'entre ces ligne et celles la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    glPopMatrix(); 
    glMatrixMode(GL_PROJECTION); 
    glPopMatrix();
    Ou, simplement, on dépile notre matrice courante, on sleectionne la matrice de porjection et on la dépile a son tour .

    Enfin , reste le coeur de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    y = 480 - FONT_HEIGHT - y; 
     
    glViewport(x-1, y-1, 0, 0); 
     
    glRasterPos4f(0, 0, 0, 1);
    FONT_HEIGHT vaut 48 dans notre cas présent ...
    j'avoue que j'ai du mal a décortiquer ces 3 lignes ...
    tout d'abord on change y en 480 ( ?? d'ou ca sort ca ?? ) - la hauteur d'une lettre - y ..

    humm ::confuse::
    Si vous pouvez m'éclairer
    merci

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 68
    Points : 86
    Points
    86
    Par défaut
    le 480 ne viendrait pas par hasard du fait que l'affichage est en 640*480 ???

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Points : 164
    Points
    164
    Par défaut
    Ca c'est une possibilité trés possible je test ca ( je suis en 800*600 ) et je vous donne le resultat ( si c'est cohérent malgré le 480 ) ...
    ca fait deja une piste
    merci

  4. #4
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Points : 164
    Points
    164
    Par défaut
    En fait aprés quelques test, les y était inversés ( le 0,0 était le coin haut droite ...et non bas-droite ... ) enfin bon j'ai juste retiré la ligne qui changeait la valeur de y ; j'ai remplacé dans le viewort x-1 et y-1 par x,y ... je ne vois pas ce que change le -1 d'ailleur O_o
    et ca va mieux la

    Donc je supose que le pushmatrice de GL_MODELVIEW se justifie par ce viewport ; et je déduit donc que le glRasterPos doit être lié a la matrice GL_PROJECTION ... et en suivant mon intuition, étant donné que le seul paramétre est la valeur du channel alpha ( a 1 = opaque ) je SUPOSE que ca sert a faire en sorte que le text soit opaque a tout ...
    enfin je m'en vais vérifié ca de suite :p

Discussions similaires

  1. Demande d'explications, code simple
    Par Chacha35 dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 15/03/2010, 16h37
  2. Explications de code test-simple.c
    Par allergen dans le forum gtksdl
    Réponses: 2
    Dernier message: 10/10/2007, 10h08
  3. probleme de code simple
    Par BFH dans le forum C
    Réponses: 18
    Dernier message: 28/10/2005, 19h57
  4. Explication de code - RE
    Par deedoo dans le forum Général Python
    Réponses: 23
    Dernier message: 29/07/2005, 15h00
  5. Réponses: 2
    Dernier message: 08/04/2004, 12h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo