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 :

affiche 119 413 triangles


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 104
    Par défaut affiche 119 413 triangles
    bonjour !

    je dois afficher 119 413 triangles (je sais je suis precis ) et pour ce faire j'ai une structure simple :
    listePolygone qui est un vector compose de polygone qui lui meme est un vector compose de triangle.

    mon but etait de tout mettre dans une display list via le code simplifie suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	polygon = glGenLists (1);
    	glNewList(polygon, GL_COMPILE);
    		listOpenGlScene->display();
    	glEndList();
    listOpenGlscene :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // display all polygone
    	for(vector<polygone*>::iterator i = listpolygone.begin(); i != listpolygone.end();++i){
    		(*i)->display() ; // display current point
    	}
    listpolygone :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	// display all triangle
    	for(vector<triangle*>::iterator i = getlistTriangle().begin(); i != getlistTriangle().end();++i){
    		(*i)->display() ; // delete current point
    	}
    et triangle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	glBegin(GL_TRIANGLES);
    		// point 1
    		glColor3f(1.0f,0.0f,0.0f);	
    		glVertex3f( pt1->getX(), pt1->getY(), pt1->getZ());	
    		// point 2
    		glColor3f(0.0f,1.0f,0.0f);
    		glVertex3f( pt2->getX(), pt2->getY(), pt2->getZ());	
    		// point 3
    		glColor3f(0.0f,0.0f,1.0f);	
    		glVertex3f( pt2->getX(), pt2->getY(), pt2->getZ());	
        glEnd();
    donc a priori rien de vraiment complique mais a l'execution au bout de 5 minutes tout simplement rien n'est affiche a l'ecran (toujours en chargement ).
    je pense donc qu'il y a un probleme car 119 413 triangles c'est pas enorme je me trompe ?

    j'ai verifie manuellement en mode debug si les valeurs etaient correct pour les points des triangles (bon bien sur pas tous les triangles c'est un peu long ) et tout semble ok.

  2. #2
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Salut,

    un des premiers conseils pour optimiser un code d'affichage OpenGL est de réduire les appels à glBegin / glEnd.

    Là tu refais un glBegin à chaque triangle, ce qui n'est pas du tout économique.

    Pour tester tu peux, dans un premier temps, ne faire qu'un glBegin à chaque nouveau polygône, voire un seul au tout début, vu que tu n'affiches que des triangles de toute facon.

    Après, si tu arrives à organiser tes triangles de manière à utiliser GL_TRIANGLE_STRIP plutôt que GL_TRIANGLES, tu vas économiser beaucoup de passages de vertex: 3 pour le 1er triangle puis 1 vertex par triangle supplémentaire, au lieu de 3 à chaque fois.
    Sur 120000 triangles tu sentiras la différence je pense

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 104
    Par défaut
    Citation Envoyé par ShevchenKik Voir le message
    Salut,

    un des premiers conseils pour optimiser un code d'affichage OpenGL est de réduire les appels à glBegin / glEnd.

    Là tu refais un glBegin à chaque triangle, ce qui n'est pas du tout économique.

    Pour tester tu peux, dans un premier temps, ne faire qu'un glBegin à chaque nouveau polygône, voire un seul au tout début, vu que tu n'affiches que des triangles de toute facon.

    Après, si tu arrives à organiser tes triangles de manière à utiliser GL_TRIANGLE_STRIP plutôt que GL_TRIANGLES, tu vas économiser beaucoup de passages de vertex: 3 pour le 1er triangle puis 1 vertex par triangle supplémentaire, au lieu de 3 à chaque fois.
    Sur 120000 triangles tu sentiras la différence je pense
    merci je vais me renseigner mais juste un truc qui me chiffaune le cerveau.

    si on fait un glbegin au debut et un autre a la fin on va se retrouver avec un "triangle" compose de 119413 * 3 points, donc je suppose qu'il prendra de lui meme que des triplets a chaque fois je ne me trompe pas ?

  4. #4
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    oui c'est ca: GL_TRIANGLES va creer un nouveau triangle tous les 3 points (d'où le S de GL_TRIANGLES

    mais comme dit si tu peux utiliser plutôt GL_TRIANGLE_STRIP tu vas economiser beaucoup de temps de calcul.

  5. #5
    Membre émérite
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Par défaut
    attention malgré tout, les triangle STRIP ou FAN demandent une disposition particulière des triangles... donc dans le cas où tu utilise ça, il faut vérifier le bon ordre de tes points dans la liste pour le STRIP ou FAN.

  6. #6
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    attention malgré tout, les triangle STRIP ou FAN demandent une disposition particulière des triangles... donc dans le cas où tu utilise ça, il faut vérifier le bon ordre de tes points dans la liste pour le STRIP ou FAN.
    Oui, c'est ce que je disais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    si tu arrives à organiser tes triangles de manière à utiliser GL_TRIANGLE_STRIP
    Pour une geometrie complexe, tu auras peut être du mal à faire une seule "STRIP" (= un seul glBegin / glEnd), mais tu peux très bien subiviser la géo en plusieurs bandes (je pense à une grille pour commencer: une bande par ligne, où chaque case est composée de 2 triangles.....)

    Bref, ca dépend beaucoup de ta géométrie, il faut trouver l'organisation de polygônes qui te permet d'appeler glBegin / glEnd le moins souvent possible (GL_TRIANGLE_STRIP n'est qu'un exemple, il y a aussi GL_TRIANGLE_FAN et d'autres)

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

Discussions similaires

  1. [Turbo Pascal] Comment afficher un triangle isocèle formé de N lignes d'étoiles ?
    Par xmustax dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 13/05/2008, 17h50
  2. afficher un triangle
    Par jalilc dans le forum C
    Réponses: 13
    Dernier message: 21/10/2006, 12h16
  3. Afficher un triangle avec OpenGL
    Par Premium dans le forum OpenGL
    Réponses: 19
    Dernier message: 19/10/2006, 09h06
  4. [C++.NET][DX9] pas moyen d'afficher un triangle
    Par NicolasG dans le forum DirectX
    Réponses: 13
    Dernier message: 02/01/2006, 15h55
  5. Comment afficher le barycentre d'un triangle
    Par DUBERNET dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 08/12/2005, 19h10

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