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] vmanque d'inspiration pour optimiser


Sujet :

OpenGL

  1. #1
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    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 369
    Points : 40 164
    Points
    40 164
    Par défaut [glut] vmanque d'inspiration pour optimiser
    bien le bonjour,

    mon problème du jour est le suivant : je dessine un monde en fonction des pixels d'une image. donc dans ma fonction d'affichage j'ai deux boucles pour imbriquées qui balaient tous les pixels de mon image et dessinent en conséquence.

    mais lorsque mon image atteint certaines propoortions (supérieure à 10000 pixels) j'ai des gros ralentissements.

    évidemment le monde n'est jamais entièrement visible, certaines parties sont cachées par d'autres, et certaines autres sont derrière la caméra. mais elles sont toutes calculées dans ma grande boucle.

    indications : les seuls objets de mon monde sont des cubes ayant tous la même taille, mais il y en a un grand nombre.

    je cherche des idées pour solutionner ce pb, et suis ouvert à toutes les propositions.

    éidemment j'ai déjà mis la commande glEnable(GL_CULL_FACE);

  2. #2
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    yop,

    les techniques possibles connu sont :

    - backface culling (avec Z-buffer pour tout eliminer)
    - frustum culling
    - partitionnement de l'espace (octree, portal, ...)

    ps : je comprends po qd tu dis :
    je dessine un monde en fonction des pixels d'une image.
    @+

  3. #3
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    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 369
    Points : 40 164
    Points
    40 164
    Par défaut
    Citation Envoyé par Chacal_ito
    ps : je comprends po qd tu dis :
    je dessine un monde en fonction des pixels d'une image.
    en gros, j'analyse les pixels d'une image et selon les valeurs des composantes des pixels je dessine ou non un objet à la position référencée par les coordonnées du pixel

  4. #4
    Membre averti Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Points : 316
    Points
    316
    Par défaut
    oui je te conseille aussi le frustum culling et les octree ,

    pour le frustum culling je te renvoie au site gametutorials.com

    en gros ca sert a savoir si un cube , une sphere ou un point sont visible par rapport a ta position de camera actuelle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class Frustum {
     
    public:
     
    	void CalculateFrustum();
    	bool PointInFrustum ( float x, float y, float z );
    	bool SphereInFrustum( float x, float y, float z, float radius);
    	bool SphereInFrustum( Vector3 &v, float radius);
    	bool CubeInFrustum  ( float x, float y, float z, float size );
    	bool CubeInFrustum  ( Vector3 &v , float size );
    private:
    	float m_Frustum[6][4];
    };

    comme ca au lien de tout dessiner tu fais d abord

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ( CubeInFrustum(object.position,objet.taille) ) dessine_objet();
    l octree consiste en une subdivision de ton espace à plusieurs niveaux diffenrents , si tu veux des precisions la dessus

  5. #5
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    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 369
    Points : 40 164
    Points
    40 164
    Par défaut
    merci bien pour cette dernière méthode.

    je ne mets pas résolu, je reste ouvert à toute autre proposition.

  6. #6
    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 : 40
    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
    Un article sur l'occlusion culling en hardware :

    http://www.gamedev.net/reference/programming/features/occlusionculling/

  7. #7
    Membre averti Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Points : 316
    Points
    316
    Par défaut
    Citation Envoyé par khayyam90
    merci bien pour cette dernière méthode.

    je ne mets pas résolu, je reste ouvert à toute autre proposition.


    jette un oeil aux octree

    http://www.gametutorials.com/Tutorials/OpenGL/Octree.htm

  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
    et surtout n'oublie pas d'utiliser des vertex array (voir des vertex array compilé si le terrain reste statique) tu vera un ENORME gain de performances...

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

Discussions similaires

  1. aide pour optimisation
    Par iwio dans le forum C
    Réponses: 17
    Dernier message: 14/07/2005, 17h34
  2. Pour optimiser le chargement ?
    Par Kerod dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 06/04/2005, 22h50
  3. Réponses: 5
    Dernier message: 04/10/2004, 18h20
  4. [DirectDraw] Que faire pour optimiser le rendu ???
    Par mat.M dans le forum DirectX
    Réponses: 8
    Dernier message: 12/12/2003, 18h02

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