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 :

Problème liste d'affichage


Sujet :

OpenGL

  1. #1
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut Problème liste d'affichage
    Bonsoir,

    J'ai réalisé un programme permettant de tracer des arbres n-aires sous forme de fractales. Le tout est empacté dans une liste d'affichage qui fonctionne parfaitement. Au départ, chaque branche de l'arbre était simplement dessinée par une ligne basique. Mais pour rendre la chose plus réaliste, je veux changer les lignes par des cylindres.

    J'ai donc crée une classe 'Cylindre.h' qui me dessine des cylindres avec une liste d'affichage. Le problème c'est que lorsque dans le code de l'arbre je demande de créer un nouveau cylindre pour chaque branche, puis de le dessiner (en faisant derrière un glCallList(id_du cylindre_crée)), au rendu, je n'ai qu'un seul cylindre et pas l'arbre complet !

    D'où cela pourrai venir selon vous ? Merci d'avance.


    Nico.
    Athlon 6000+ Dual Core & GeForce 8600 GT -- Ubuntu Gutsy

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 108
    Points : 128
    Points
    128
    Par défaut
    Tu dois surement avoir oublié de positionner le cylindre et ceux-ci doivent donc s'afficher les uns sur les autres.

  3. #3
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Pourtant je fais bien les rotations et translations au préalables puisque mon programme fonctionne avec des lignes. En fait je pense que ca vient du fait que je crée des cylindres qui eux mêmes sont dans des listes. Et ca ne marche peut-être pas de créer une liste dans une liste non ? J'ai fait un test simple : j'ai retiré la liste du cylindre et ca marche .. Le pb c'est que je veux garder une liste pr le cylindre et pour l'arbre, qq1 aurait-il une solution ? Merci.


    Nico.
    Athlon 6000+ Dual Core & GeForce 8600 GT -- Ubuntu Gutsy

  4. #4
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Personne n'a d'idée ?
    Athlon 6000+ Dual Core & GeForce 8600 GT -- Ubuntu Gutsy

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 108
    Points : 128
    Points
    128
    Par défaut
    Est-ce que OpenGL te renvoi une erreur quand tu utilises une liste d'affichage dans une autre ?

  6. #6
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Oui il me renvoyait une erreur : "invalid enumerate". Mais j'ai changé depuis ma stratégie. On m'a conseillé de ne jamais mettre une liste d'affichage dans le constructeur d'une classe. Du coup je crée ma liste dans le programme principal. Je n'ai donc plus de liste pour la classe cylindre, ni dans la classe arbre mais seulement une seule pour mon objet arbre instancié dans le 'main'.

    En revanche, j'ai un autre petit souci : au lieu de faire un seul arbre, je voudrai faire une chtite forêt. Dans mon 'main' j'ai donc crée une liste forêt qui possède deux boucles imbriquées et qui appelle une liste contenant un arbre. En gros ca donne ca :

    Dans la fonction init du 'main' :
    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
     
    	ID_arbre = glGenLists(1);
    	glNewList(ID_arbre,GL_COMPILE);
    	 Arbre a( 2.8, 2.5, 0, 0, 0, 30, 5, 0.1, 1.0, 0.5 );
    	glEndList();
     
    	ID_foret = glGenLists(1);
    	glNewList(ID_foret,GL_COMPILE);
    	 for( int i=0; i<= 100; i+= 5 )
    	 {
    	 	for( int j=0; j<= 100; j+= 5 )
    		{
    			glPushMatrix();
    			 glTranslatef(i,0,j);
    			 glCallList(ID_arbre);
    			glPopMatrix();
    		}
    	 }
    	glEndList();
    Dans la fonction d'affichage du 'main' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    glCallList(ID_foret);
    Et quand je me déplace dans la scène ca rame à mort c'est horrible .. Pourtant j'ai fait des listes, les id des listes sont différents entre eux et différents de 0. Pour info, j'ai un Athlon 1500+ avec GeForce 2 MX 400. Merci de me filer un petit coup de pouce .

    Nico.
    Athlon 6000+ Dual Core & GeForce 8600 GT -- Ubuntu Gutsy

  7. #7
    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
    y'a pas de mystere, y'a trop d'arbres... (surtout pour une Geforce 2 MX...)
    en fait pour faire ta foret il ne faut pas utiliser une liste d'affichage mais dessiner chaque arbre apres l'avoir tester avec du frustum culling, comme ca tu n'affiche que les arbres visible et non pas la foret entiere...
    ce n'est pas parce que tu affiche tout tes arbres dans une liste d'affichage que ce sera fuide. Pour augmenter les performance, le but n'est pas d'afficher le plus vite possible, mais d'abord d'afficher le moins possible (donc ne pas afficher tout ce qui n'est pas visible) puis ensuit quand tu algo de partitionnement est bon, la tu peut t'interesser a augmenter la vitesse d'affichage...
    Par exemple, dans doom 3, a chaque instant le moteur n'affiche qu'une infime partie du niveau, le reste n'etant pas visible, ca ne sert à rien de faire travaille la carte graphique pour calculer des truc dont on sait qu'ils ne seront pas affiché au final...
    * 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

Discussions similaires

  1. problème liste affichage des deux plus grands nombres
    Par LeGenTleManfr dans le forum Général Python
    Réponses: 8
    Dernier message: 05/11/2012, 20h13
  2. problème avec l'affichage d'une liste
    Par fdaili dans le forum Débuter
    Réponses: 2
    Dernier message: 12/09/2012, 13h23
  3. Réponses: 5
    Dernier message: 25/05/2010, 21h58
  4. problème list d'objets affichage
    Par faten7 dans le forum C++
    Réponses: 4
    Dernier message: 09/08/2008, 12h41
  5. Problème requête d'affichage d'une liste
    Par mLk92 dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/01/2007, 11h17

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