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 :

[glut] forcer l'affichage au premier plan


Sujet :

OpenGL

  1. #1
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 370
    Points : 40 164
    Points
    40 164
    Par défaut [glut] forcer l'affichage au premier plan
    bien le bonjour,

    mon problème du jour est le suivant : je souhaite que certains objets soient toujours au premier plan (ou du moins, toujours visibles).
    pour l'instant je m'en suis sorti en les mettant très près de la caméra. mais bon.... ça a ses limites.

    j'affiche une texture sur un polygone placé très près de la caméra et je souhaite le déclarer en tant qu'objet au premier plan. comment dois-je m'y prendre ?

  2. #2
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 787
    Points
    1 787
    Par défaut
    : pas tout compris
    Tu veux qu'un objet suive ta caméra, ou tu veux qu'une partie de l'écran soit rendu une bonne fois pour toute??

    pour l'instant je m'en suis sorti en les mettant très près de la caméra. mais bon.... ça a ses limites.
    quel est le probléme, qu'es ce que tu veu dire comme limites ?

  3. #3
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 370
    Points : 40 164
    Points
    40 164
    Par défaut
    ce que je veux, c'est coller une texture sur mon écran et la conserver quels que soient les mouvements de la caméra.

    le meilleur moyen d'expliquer, c'est de prendre des exemples existants, celui qui me vient en tête c'est celui des jeux de fps où une arme est au premier plan et suit la caméra quels que soient ses mouvements.

    j'ai réussi à simuler ce genre de choses en mettant ma textures très près de la caméra (genre à z=-.001), mais lorsque je suis très près d'autres objets, les textures s'intersectent et donc, ça devient tout moche

  4. #4
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 787
    Points
    1 787
    Par défaut
    C'est une texture en 2D, style doom ?
    Ou c'est une arme en 3D ??

    Essaye ce truc : tu t'arrange pour afficher ton arme en dernier en changeant la valeur minimum du z-buffer avec glDephtRange(GLclampd near, GLclampd far).

    Imaginons que tu ai definit ta perspective ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gluPerspective(yfov,(float)w/(float)h,znear,zfar); //avec znear >0.01
    alors tu fait ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    afficheWorld();
     
    glDephtRange(0,zfar);
     
    ...
    afficheArme();  //tu l'affiche avec z=0.01
    glDepthRange(0.02,zfar);
    quoique c'est encore possible que tu est des trucs qui soit à moitié dans ton arme si elle est en 3D, alors autant désactiver le test de z-buffer dans ce cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    afficheWorld();
     
    glDisable(GL_DEPTH_TEST);
    afficheArme(); 
    glEnable(GL_DEPTH_TEST);
    J'éspére pas te raconter de connerie, teste tu verra. C'est que j'ai un peu mal au crâne aujourd'hui (lendemain de = )

  5. #5
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 370
    Points : 40 164
    Points
    40 164
    Par défaut
    pour info, c'est une texture en 2d que je manipule, genre logo de télé qui reste toujours à l'écran.

    bon, j'ai réussi à faire un truc pas trop mal en utilisant les

    glDisable(GL_DEPTH_TEST);
    afficheArme();
    glEnable(GL_DEPTH_TEST);

    mais ça m'a forcé à afficher ma texture en dernier et donc à rajouter un glLoadIdentity(); dans ma fonction callback d'affichage. c'est un peu dommage, mais ça marche . merci bien, à bientôt pour de nouvelles aventures !

  6. #6
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 787
    Points
    1 787
    Par défaut
    Pour être sur que l'image s'affiche, eux il faut utiliser glClear( GL_DEPTH_BUFFER_BIT);

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    Juste comme ca en passant, j'ai vu se ballader dans vos message 'z<.001' et la y'heu me dit ma ké catastrophe !
    Sur certaine machine (est pas des moindre : geForce 4) les z inférieur à 1 font bugger le test de z buffer, je m'en suis rendu compte qd un de mes potes m'as dit qu'il ne voyait pas les pions sur mon jeu de dame.

    Je retrouve pas la référence, mais j'avais lu que effectivement il était vraiment pas conseillé de mettre le zNear inférieur à 1.


    Pour ton pb moi ce que je ferais c'est :
    clear depth buffer ou désactive le ztest (un désactive c'est qd meme mieux, mais bien sur faut avoir un model qui ne se mange pas lui meme, si tu n'as qu'une texture sur un poly, désactive)

    un p'tit glLoad identity pour replacer ton point de vue ou il faut, et un dessin a des coordonnées fixe de ton objet.

    le load identity ne coutte pas plus qu'un gltranslate, si tu as encore besoin de ta matrice aprés : glpushfront pushback biensur.
    En tout cas le gros intéret du load identity face a un gltranslate(sous_la_caméra) c'est que tu es sur que t'as caméra sera au bon endrois, en effet, si t'es coordonée de caméra on était modifier dans ta classe caméra mais pas dans les matrices opengl, en appelant gltranslate (sous_la_cam), tu utilisera pas les coordonnées effective de opengl et ton objet se dédoublera, c'est un pb que j'ai sur mon jeu spacial qd je demande à la cam de suivre les vessaux


    vàlà, moi je prend ma journée pour la pein,
    Trident.

  8. #8
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    effectivement : znear < 1 = jamais !!!
    c'est a cause de probleme d'interpolation et de mapping de valeurs du z buffer...

    sinon si je devine juste tu veut afficher des info a l'ecran (barre de vie ou autre). si ce sont des info 2D tu a tout interet a passer en mode ortho pour les afficher en desactivant le zBuffer.
    par contre si ce sont des info 3D (visage d'un perso par exemple) la methode la plus simple doit etre effectivement de nettoier le zBuffer (glClear) mais je ne pense pas que ce soit la plus rapide...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage 2D premier plan.
    Par katmai dans le forum OpenGL
    Réponses: 4
    Dernier message: 29/12/2009, 15h16
  2. Affichage en premier plan d'une TextBox
    Par molo2003 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 20/10/2007, 14h28
  3. [c++] Souci d'affichage au premier plan
    Par Pov' typ' dans le forum DirectX
    Réponses: 2
    Dernier message: 25/06/2006, 22h02
  4. comment forcer un messageboxA en premier plan?
    Par gregcat dans le forum Delphi
    Réponses: 3
    Dernier message: 01/06/2006, 16h45
  5. [JPanel] Affichage en premier plan
    Par Snowballz dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 21/07/2004, 17h07

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