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 :

Ne pas afficher les faces cachées


Sujet :

OpenGL

  1. #1
    Membre actif Avatar de gamerome
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 265
    Points : 211
    Points
    211
    Par défaut Ne pas afficher les faces cachées
    Bonjour,
    Je voudrais savoir comment faire pour ne pas dessiner et texturer les faces cahcées.

    J'utilise le z-buffer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH |GLUT_ALPHA);
    (...)
    glDepthFunc(GL_LEQUAL);
    glEnable(GL_DEPTH_TEST);
    (...)
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    En fait ce que je voudrais faire , c est ne pas dessiner les faces cachées via ma fonction glBegin(GL_POLYGON). Mais il me semble que pour que le z-buffer marche, toutes les faces doivent etre dessinées non?

    Sinon par quel autre moyen passer?
    Merci

  2. #2
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut
    Tu t'es renseigné sur le culling ?

    http://jeux.developpez.com/faq/3d/?page=culling

  3. #3
    Membre actif Avatar de gamerome
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 265
    Points : 211
    Points
    211
    Par défaut
    oui mais ca ne me permet pas de resoudre mon prob.
    Je tourne a 30fps chez moi ( j ai une geforce FX 5100) et ca ne rame pas du tout , par contre chez un ami qui a une geforce 2MX, ca rame beaucoup

  4. #4
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut
    Peut etre que le problème ne vient pas du nombre de faces trop important.

  5. #5
    Membre actif Avatar de gamerome
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 265
    Points : 211
    Points
    211
    Par défaut
    Meme si le pb ne viens pas de ca, je souhaite juste savoir comment faire pour ne pas dessiner (dessiner != afficher) les faces qui sont cachées. Car c 'est inutile de dessiner puis de texturer un mur que l'on ne voit pas.

    Si je reduis le nombre de polygones , le fps passe de 30 a 70...

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    1 - combien tu as de polygones ?
    2 - le culling comme dit Zoso_ peut régler une partie de ton problème
    3 - si tu veux éliminer toi même les faces plutot que de laisser cela à la carte graphique qui le fera mieux que toi il faut que tu calcules la normale à chaque triangle et si la normale va dans la même direction z (le signe de la coordonnée z de la normale) que la caméra alors elle ne doit pas être affichée
    4 - si tu affiches beaucoup de polygones tu devrais plutot te renseigner sur comment découper ton objet en blocs pour n'afficher que les parties visibles avec un octree par exemple (c'est peut-etre ce que tu cherches d'ailleurs)
    5 - si ce n'est pas le cas, tu peux utiliser les "vertex array" ou les VBO (vertex buffer objects) fais quelques recherches tu trouveras facilement des posts sur le forum où on en a déjà parlé
    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 actif Avatar de gamerome
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 265
    Points : 211
    Points
    211
    Par défaut
    Salut shenron666,
    J'affiche au maximum 3000 polygones tous texturés. C'est pas enorme (enfin je pense) et pourtant je tourne a 30fps.
    Je vais réfléchir au culling.
    Actullement je ne dessine pas les faces qui se trouvent dans mon dos. Mais il faudrait que j'elimine celles qui me font face et qui sont placé derriere un mur. Dans ce cas, je ne verrai pas ces faces dc pour moi inutile de la dessiner et de la texturer.
    Je vais me renseigner sur les "vertex array" et les VBO.

    Merci

  8. #8
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Salut
    Mais il faudrait que j'elimine celles qui me font face et qui sont placé derriere un mur.
    Je pense Zoso_ a bien mis le doigt sur ce qu'il te fallait :
    Citation Envoyé par Zoso_
    Tu t'es renseigné sur le culling ?
    http://jeux.developpez.com/faq/3d/?page=culling


    Comme l'explique le lien de la FAQ, le culling ne se limite pas au back-face culling. Tes performances pourraient s'améliorer avec un simple frustum culling (simple à implémenter, et très efficace si tu implémentes un octree comme le propose shenron666), ou avec de l'occlusion culling (qui correspond à ton exemple avec le mur).

    Par contre c'est vrai que 3000 polygones (triangles ?) texturés ce n'est pas beaucoup. Est-ce que tu utilise un moteur ou un bibliothèque tierce, ou est-ce du homegrown OpenGL ?
    And still we will be here, standing like statues ...

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Citation Envoyé par gamerome
    J'affiche au maximum 3000 polygones tous texturés. C'est pas enorme (enfin je pense) et pourtant je tourne a 30fps.
    Ce n'est effectivement pas énorme, autant le nombre de polygones que le nombre de fps
    A titre de comparaison, dans half-life 2 je crois que les personnages font dans les 6000 polygones chacun à eux seuls, dans half-life 1 ce devais être dans les 1500
    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.

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il n'y a pas que le nombre de polygones qui joue sur les perfs

    http://jeux.developpez.com/faq/3d/?p...NIQUES_goulots

  11. #11
    Membre actif Avatar de gamerome
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 265
    Points : 211
    Points
    211
    Par défaut
    Est-ce que tu utilise un moteur ou un bibliothèque tierce, ou est-ce du homegrown OpenGL ?
    Je ne sais pas exactement ce qu'est le homegrown mais si j'ai bien compris, tu me demande si c'est un moteur fais par moi meme. Effectivment c'est un moteur que j'ai fais moi meme et je n'utilise pas d'autre librairie mis à part glut.

    Pour le culling je ne me suis pas encore renseigné.
    Et mes polygones sont pour la plupart des quadrilateres , et quelques triangle.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 73
    Points : 69
    Points
    69
    Par défaut
    3000 polygones avec 30 fps ca me parrait quand meme tres lent... même sans culling, meme sans clip... La limitation ne serait-elle pas plutot au niveau des calculs CPU ?

  13. #13
    Membre actif Avatar de gamerome
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 265
    Points : 211
    Points
    211
    Par défaut
    Je ne fais aucun gros calcul lors de l'affichage donc je ne pense pas que ca vient de ca.
    Peut etre que ca vient de la taille de mes images.
    J'ai 80 textures de taille 512*512 , 256*256, 128*128, j en ai 2 de 724*724 et quelques unes du genre 128*120 ou 128 * 57 . Leur format est jpg.

    Autre chose, peut etre que je calcul mal le fps
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void GameCycle( void )
    {
        static double current_time = 0;
        static double last_time = 0;
     
        last_time = current_time;
        current_time = glutGet( GLUT_ELAPSED_TIME );
     
        double fps = 1.0 / (current_time - last_time);
        printf("FPS=%f \n",fps*1000);
     
    }

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Citation Envoyé par gamerome
    J'ai 80 textures de taille 512*512 , 256*256, 128*128, j en ai 2 de 724*724 et quelques unes du genre 128*120 ou 128 * 57 . Leur format est jpg.
    Les textures en 724*724, 128*120 ou 128*57 ne sont pas en multiple de 2, elles ne te posent pas de problème ?
    Combien de place prennent tes textures ? par rapport à la taille mémoire de la carte video

    Sinon pour les fps, bien que je ne pense pas que ça vienne de là, ce n'est peut-etre pas utile d'utiliser des doubles pour les calculer (ni de les calculer à chaque image)
    je ne sais pas ce que te renvoie glutGet(GLUT_ELAPSED_TIME) mais ça doit etre un entier non signé non ?
    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.

  15. #15
    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
    heu... tu affiche de GL_POLYGONES la non ?

    deja on tiens un des responsables de la lenteur...
    en plus je suppose que tu utilise un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(tout mes polygones)
        glBegin(...)
        // le polygone
        glEnd
    fin boucle
    aulieu de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    glBegin(...)
        for(tout mes poly)
        fin for
    glEnd()
    simplemsupposition, mais pour obternir des perf pareil, c'est que le code openGL ne doit vraiment pas etre optimal...
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    question : est-ce que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    glBegin(GL_POLYGON)
        for(tout mes poly)
        fin for
    glEnd()
    affiche 1 ou plusieurs polygones ?
    en fait, le début et la fin d'un polygone ne sont ils pas définis par le glBegin et le glEnd ?
    d'où l'intérêt certain d'utiliser des triangles (strip, fan,ect) sinon c'est la carte qui va devoir spliter les polygones en triangles
    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.

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 73
    Points : 69
    Points
    69
    Par défaut
    A mon avis, ca affiche seulement un énorme polygone avec autant de vertice qu'il y'en a de déclaré...

  18. #18
    Membre actif Avatar de gamerome
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 265
    Points : 211
    Points
    211
    Par défaut
    Effectivement je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for ts les polygones{
    glBegin(GL_POLYGON)
    /*...*/
    glEnd()
    }
    Je viens de tester l'autre maniere et ca ne marche pas du tout !! En plus ca bug avec les textures dc ...


    Les textures en 724*724, 128*120 ou 128*57 ne sont pas en multiple de 2, elles ne te posent pas de problème ?
    Combien de place prennent tes textures ? par rapport à la taille mémoire de la carte video
    Elles ne me posent aucun problème. Comment je sais combien de place prennent mes textures?

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Pour avoir une approximation de l'espace pris par tes textures, tu fais la somme des calculs pour chaque texture avec pour chaque texture :
    largeur * hauteur * couches (3 pour du rgb, 4 pour du rgba)

    tu auras déjà une idée de ce qu'elle prennent en mémoire
    après, il y a aussi la question des mipsmaps si tu t'en sert

    concernant ta boucle d'affichage, tes polygones ne peuvent-ils pas être changés en quads ou en triangles ? comme te l'a fait remarquer Bafman, GL_POLYGON n'est pas pratique et la boucle qu'il a proposé en remplacement fonctionne à condition d'utiliser des GL_QUADS ou des GL_TRIANGLES
    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.

  20. #20
    Membre actif Avatar de gamerome
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 265
    Points : 211
    Points
    211
    Par défaut
    espace pris par mes textures:
    (largeur * hauteur * couches) * nb_textures = 26899968

    Je me sert des mipmap aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    gluBuild2DMipmaps(GL_TEXTURE_2D, m_uiComposante, m_uiDimX, m_uiDimY,temp, GL_UNSIGNED_BYTE, m_ucpPixel);
    Sans la fonction glTexParameterf , le fps remonte a 70 ce qui est normal je pense vu que l'on indique pas le mode de placage de la texture.

    J'ai remplacé GL_POLYGON par GL_QUADS et ca ne change rien et la boucle que m a prposé bafman ne marche toujours pas.

Discussions similaires

  1. Ne peux pas afficher les fichiers cachés
    Par awalter1 dans le forum Windows XP
    Réponses: 8
    Dernier message: 20/03/2012, 17h22
  2. je ne peux pas afficher les fichers cachés
    Par andyinfo dans le forum Windows XP
    Réponses: 6
    Dernier message: 08/07/2008, 22h01
  3. [Sécurité] Ne pas afficher les variables de l'URL
    Par Wormus dans le forum Langage
    Réponses: 17
    Dernier message: 23/10/2005, 14h13
  4. Afficher les fichiers cachés avec apache ?
    Par Michaël dans le forum Apache
    Réponses: 2
    Dernier message: 20/12/2004, 09h56
  5. [JTable] Comment ne pas afficher les titres ?
    Par FabienBxl dans le forum Composants
    Réponses: 3
    Dernier message: 08/10/2003, 15h01

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