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 :

Optimisation de tracés de lignes


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Septembre 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 43
    Par défaut Optimisation de tracés de lignes
    Bonsoir,

    Je viens vers vous car j'ai besoin d'une aide pour optimiser un tracé d'algorithme en openGL de lignes.

    Je travaille sur un logiciel d'astronomie en mode fisheye et je dois tracer les contours des constellations (ci dessous tout est en blanc)
    Je suis passé du logiciel avec des primitives en opengl2 à des primitives en opengl4

    Nom : spacecrafter-17.10.21-21.03.18.jpg
Affichages : 142
Taille : 136,8 Ko


    Mon travail a pour but d'améliorer l'algorithme suivant:

    algo 1 :
    POUR chacune des 88 constellations:
    - sélectionne le shader
    - sélectionne/calcule les points --−> un vector de taille variable transmis avec un glbufferData
    - sélectionne/calcule la couleur --> un simple vecteur de 3 floats transmis avec un uniform
    - glDrawArray
    - gluseProgram(0)
    FIN_POUR

    Je suis arrivé à ceci:

    algo 2 :
    sélectionne le shader
    POUR chacune des 88 constellations:
    - sélectionne/calcule les points --−> un vector de taille variable transmis avec un glbufferData
    - sélectionne/calcule la couleur --> un simple vecteur de 3 floats transmis avec un uniform
    - glDrawArray
    FIN_POUR
    - gluseProgram(0)

    Ce changement d'algorithme m'a permis de diviser le temps d'exécution par 2

    Mais je souhaiterai faire encore mieux en créant l'algorithme 3 :

    algo 3 :
    sélectionne le shader
    POUR chacune des 88 constellations:
    - sélectionne/calcule les points --−> un vector de taille variable transmis avec un glbufferData
    - sélectionne/calcule la couleur --> un simple vecteur de 3 floats transmis avec un ???????? <--------------comment transmettre à la CG cette information ?
    FIN_POUR
    - glDrawArray( tout en un quoi !)
    - gluseProgram(0)


    sauf que pour l'algo 3, je ne sais pas comment passer ce vecteur de 3 floats qui reste constant pour chaque calcul de point.

    Je veux dire que les données sont de cette forme:

    Constellation1
    - vector<24 floats> [12 points]
    - couleur <3 floats> [1 couleur]

    Constellation2
    - vector<328 floats> [164 points]
    - couleur <3 floats> [1 couleur]

    Constellation3
    - vector<100 floats> [50 points]
    - couleur <3 floats> [1 couleur]

    ...

    Constellation88
    - vector<46 floats> [23 points]
    - couleur <3 floats> [1 couleur]


    Je suis bloqué sur mon travail car je ne sais pas comment dire au shader que la couleur est la même pour le paquet de données de taille variable.



    Merci beaucoup de m'aider !

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 127
    Billets dans le blog
    149
    Par défaut
    Bonjour,

    C'est très bien de diminuer le nombre de draw call. Pour passer des donner constantes (pour toute exécution d'un shader) il faut utiliser les variables uniformes.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Septembre 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 43
    Par défaut
    Sauf que je ne sais pas comment faire cela.

    je prend un exemple avec des nombres au pif mais pour bien expliquer

    J'ai ceci a envoyer à la carte graphique en une seule fois
    pos: 5 4 6 8 2 9 4 8 2 6 (10 floats)
    color : 0.1 0.2 0.1
    pos: 10 5 2 7 2 6 (6 floats)
    color : 0.1 0.3 0.5
    pos: 8 7 5 6 9 4 2 8 5 7 9 5 3 5 2 1 0 8 (18 floats)
    color : 0.4 0.2 0.7

    le nombre de pos n'est pas constant, jamais le même.

    Aussi comment puis je dire à la carte graphique, en un seul passage que :les 5 premiers points tu les mets en color : 0.1 0.2 0.1 , les 3 suivant en color : 0.1 0.3 0.5 et les 9 derniers en color : 0.4 0.2 0.7 ?

    Sur l'exemple, ce que j'ai dans mon programme représente 3 appels à gldrawarray ou j'ai la couleur passée en variable uniform.
    mais ce sont trois appels.

  4. #4
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Mouais, je serais toi, je stockerais tous les points de toutes les constellations, avec les couleurs dans un seul VBO, et je dessinerais tout en un seul draw call.
    En VRAM ça va prendre quoi, quelques Ko ? C'est ridicule comme poids, même sur mobile, donc je tenterais d'abord ça.

    Je me pose par contre une question sans rapport avec le rendu : Où as-tu obtenu les coordonnées des limites des constellations ?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  5. #5
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Septembre 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 43
    Par défaut
    Je travaille sur un dérivé de stellarium.

    Les étoiles ont des coordonnées. Elles sont "fixes"dans le ciel. Aussi il suffit de dessiner autour des constellations les lignes que j'ai représenté. Pour cela, un codage a été fait (dans stellarium) pour les lignes représentés par des points désignant les frontières entre les étoiles.

    En tout cas merci de ta réponse !

    Pour info l'algorithme 3 implémenté va 6 fois plus vite que l'algorithme 2 qui lui même va 2x plus vite que le 1 issue de l'opengl2


    12 x plus vite ....

    Merci pour vos réponses !!!

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

Discussions similaires

  1. tracé une ligne dans un picturebox
    Par kakrocq dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 21/05/2007, 13h30
  2. [GD] Tracé de lignes
    Par lebigboss dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 11/05/2007, 10h35
  3. [VCL][D6]Tracé de lignes ds un PaintBox
    Par fab56 dans le forum Delphi
    Réponses: 5
    Dernier message: 05/12/2006, 19h45
  4. optimiser le tracé d'une courbe
    Par Zorgz dans le forum 2D
    Réponses: 3
    Dernier message: 04/09/2006, 16h17
  5. tracé de ligne en pointillé
    Par pavlacki dans le forum Langage
    Réponses: 1
    Dernier message: 03/04/2006, 20h52

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