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 :

Rien compris, OpenGL et Z axis !?!


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Par défaut Rien compris, OpenGL et Z axis !?!
    Je suis en train de créer une petite interface 2D.
    J'ai des objets (lines) et des textures (quads).

    Je n'arrive pas à comprendre le principe de gestion de la depth. A priori on devrait pouvoir dessiner le tout dans n'importe quel ordre, le Z axis va définir quel objet est devant l'autre...

    Alors ça ca marche avec tous les objets sauf mes sprites...

    Pour afficher ma ligne au dessus de mon sprite, je suis obligé de faire (sprite z=10 et line z=9) !?!

    Alors que j'ai :

    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
     
        glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); CHECK_GL_ERROR;      // Black Background
        glClearDepth( -1.0f ); CHECK_GL_ERROR;                        // Depth Buffer Setup
        glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); CHECK_GL_ERROR;
     
        glMatrixMode( GL_PROJECTION ); CHECK_GL_ERROR;
        glOrtho( 0.0, mDisplay.width(), 0.0, mDisplay.height(), -1024.0, 1024.0 ); CHECK_GL_ERROR;
        glDepthRange( -1.0f, 200.0f );
     
        glEnable( GL_TEXTURE_2D ); CHECK_GL_ERROR;
        glEnable( GL_BLEND ); CHECK_GL_ERROR;        // Turn Blending On
        glEnable( GL_DEPTH_TEST); CHECK_GL_ERROR;  // Turn Depth Testing On
        glDepthFunc( GL_GEQUAL );
     
        + dessins
    Any help ?

  2. #2
    Membre émérite
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Par défaut
    Salut,

    L'ordre d'affichage en mode orthogonal avec le deph-buffer désactivé chez moi se fais ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    glPushMatrrix();
      glTranslatef(X,Y,0);  // affiché en dernier
      Dessin2D();
    glPopMatrix();
     
    glPushMatrrix();
      glTranslatef(X1,Y1,0); // affiché en second
      Dessin2D1();
    glPopMatrix();
     
    glPushMatrrix();
      glTranslatef(X2,Y2,0);
      Dessin2D2();		 // affiché en premier
    glPopMatrix();


    On remarque que le Zaxis est toujours zéro, donc c'est l'ordre d'input de dessins qui fais l'affaire, chez moi.
    J'espère avoir pu t'aider

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Par défaut
    Ok, merci !

    Ca marche en rajoutant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glDisable( GL_DEPTH_TEST);  // Turn Depth Testing Off
    Avant le dessin des sprites...

    Par contre, je n'ai toujours pas compris pourquoi il ne tient pas compte du Z axis... C'est le mode ortho qui fonctionne comme ça ?

  4. #4
    Membre éclairé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Par défaut
    Le mode ortho, tu l'auras compris, c'est pour faire de la "2d", seuls x et y comptent. L'ordre d'affichage primera sur le z que ce soit des sprites ou des lignes (enfin je pense fortement, je me plante peut-être).
    Il faut que tu fasses plusieurs "plans" pour que tu affiches dans le bon ordre : le dernier sera par dessus le précédent. Afficher
    -d'abord l'image de background,
    -puis tes sprites de level par exemple,
    -ensuite tes persos,
    -optionnel : un foreground qui donnera l'impression que les persos passent derrière ,
    -ensuite le hud.
    (Dans le cas d'un jeu en 2d de plateformes par exemple)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Par défaut
    Lapin compris... y'a pas que les jeux dans la vie

    Ils auraient quand même pu tenir compte du Z axis... Mais ce n'est pas grave, faut juste contrôler l'ordre de dessin.

    Pour info, dans mon cas il s'agit d'une application médicale. Je change tous les affichages Xv en passant par OpenGl. Maintenant, je n'ai plus qu'a régler le problème des threads

    Merci à vous !

  6. #6
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 549
    Par défaut
    Citation Envoyé par LapinGarou Voir le message
    Le mode ortho, tu l'auras compris, c'est pour faire de la "2d", seuls x et y comptent. L'ordre d'affichage primera sur le z que ce soit des sprites ou des lignes (enfin je pense fortement, je me plante peut-être).
    le "mode ortho" fonctionne exactement de la même manière que le "mode perspective"
    en fait, tu n'es pas en mode ortho ou en mode perspective, c'est juste ta matrice de projection qui change, elle influe sur la façon dont les coordonnées 3D seront transformées en 2D pour l'écran
    en ortho ou en prespective OpenGL fonctionne toujours avec 3 Dimensions
    si tu utilises glVertex2f alors le z vaudra simplement 0 (cf doc opengl )
    When only x and y are specified, z defaults to 0 and w defaults to 1.
    When x, y, and z are specified, w defaults to 1.
    l'ordre d'affichage c'est toujours celui que tu donnes par la composante Z lorsque le Z buffer est actif
    si ton Z va de 0 proche à 1 lointain
    tu dessines un objet A en z=0 et un objet B en z=1
    peu importe l'ordre dans lequel tu envoies les objets, A sera toujours devant B
    le tri se fera avec le Z buffer

    si tu désactives le Z buffer avec glDisable( GL_DEPTH_TEST);
    alors dessiner A avant B aura une importance

    donc même en PROJECTION Ortho, si tu gardes le zbuffer actif, il faut que tu renseignes la coordonnée Z de tes sommets
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Par défaut
    Là, c'est la logique qui parle... et c'est comme ça que je l'avais compris au départ. Mais il y a quand même un soucis avec les sprites (quad+texture) qui dépendent de l'ordre d'affichage et ne tiennent pas compte du Z...


Discussions similaires

  1. GridBagConstraints : Rien compris
    Par popy67 dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 19/12/2008, 15h57
  2. [XSLT] XML débutant : Rien compris !
    Par popy67 dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 23/05/2008, 16h41
  3. congés payés rien compris
    Par ti'lou dans le forum Congés
    Réponses: 13
    Dernier message: 28/02/2007, 19h06
  4. [Noob] Mon premier programme : rien compris
    Par uNd3r² dans le forum Dev-C++
    Réponses: 5
    Dernier message: 19/12/2006, 21h23

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