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 :

Vertex Array, accès en écriture [OpenGL 1.x]


Sujet :

OpenGL

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    Par défaut Vertex Array, accès en écriture
    Bonsoir, je crée régulièrement toutes sortes de projets 3D avec des décors enregistrés dans des fichiers .obj réalisés sous Blender. J'utilise depuis peu les Vertex Array, qui me permettent d'avoir un rendu fluide pour un terrain contenant plusieurs dizaines de milliers de vertices.

    Seulement voilà, j'aimerais pouvoir animer certains objets, il me faudrait pour cela accéder en écriture aux vertices stockés dans la mémoire de la CG pendant le rendu, mais j'ignore comment faire, et si cela est possible.

    Par exemple, si je veux créer un moteur de particules pour simuler de la fumée, de l'eau ou autre, je peux utiliser les VA pour générer plusieurs milliers de triangles, mais comment les animer ensuite ?

    Est-ce que OpenGL propose des fonctions d'écriture dans les VA au même titre que glDrawArrays() pour la lecture ? Je n'ai rien trouvé pour le moment.

    Merci par avance et bonne soirée.

  2. #2
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 476
    Points
    11 476
    Billets dans le blog
    11
    Par défaut
    Salut!

    Tu utilises les Vertex Arrays, ou les Vertes Buffer Objects ?

    Pour les Vertex Arrays, tu passes normalement ton pointeur de données à chaque frame, alors que pour les VBO, tu stockes ces données dans la VRAM.

    De ce fait, pour les vertex arrays, la question ne se pose pas, puisque ton tampon c'est ton programme qui l'a, et tu peux donc le modifier comme tu veux.

    Pour les VBO, c'est différent, car il faut mapper le buffer dans la RAM, via glMapBufferRange, faire tes modifications, puis démapper le buffer, via glUnmapBuffer.
    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).

  3. #3
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    Par défaut
    J'utilise bien les Vertex Arrays et non les Vertex Buffer Objects, j'appelle gl*Pointer() et glEnableClientState() une seule fois avant le rendu. Si je le fais à chaque frame ça ne risque pas de ralentir le rendu étant donné que je charge les données à chaque frame ? Les VA perdent leur intérêt dans ce cas.

  4. #4
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 476
    Points
    11 476
    Billets dans le blog
    11
    Par défaut
    Non, les VA ne perdent pas leur intérêt, ça reste toujours bien plus rapide que glBegin()...glEnd().
    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
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Ben je vois pas le soucis , comme le dit DragonJoker , les VA utilise des vertices en RAM, tu as 2 choix :
    -Soit le faire coter CPU et donc modifier les vertex que tu passe a tes VA.
    -Soit passer sur OpenGL 2 au moins (mais je te conseil de passer sur OpenGL 3) , et d'utiliser les shader qui te permet de modifier tes vertex coté GPU.

    Je vais quand même détailler parce que cela a quand même une contrainte coté CPU , si tu as par exemple un CPU de 2 GHZ , au mieux tu peux esperer 2 GFLOPS (je vais pas détailler que ce n'est qu'un chiffre théorique je doute que le CPU est capable d'optimiser pour un tel chiffre et la j’enlève L'OS et les autres programmes ) , enfin dans les faits tu peux diviser ça facile par 2 ou 4 :p
    Et la puissance de 1 GFLOPS et 0.5 GFLOPS c'est pas énorme (tout dépend de ce que tu vise) mais si tu veux une comparaison , les consoles de 6eme génération fournissait coté CPU 2 GFLOPS ou plus.
    Donc ton dans cas , soit le compilo utilise des instructions SIMD , soit pour optimiser ton code tu optimise certain bout de code en asm.
    Ou alors utilise des shaders x)

  6. #6
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    Par défaut
    Merci pour vos réponses, la solution est en fait évidente :

    Citation Envoyé par dragonjoker59
    pour les vertex arrays, la question ne se pose pas, puisque ton tampon c'est ton programme qui l'a, et tu peux donc le modifier comme tu veux.
    Effectivement, je rejetais cette solution jusqu'à présent car pour moi cela équivalait à une ancienne méthode que j'utilisais auparavant (Petite confusion de ma part) et qui nécessitait un accès à la RAM pour chaque vertex (Ce qui pouvait aller jusqu'à plusieurs dizaines de milliers d'accès RAM par frame), alors qu'avec cette solution je ne fais qu'un seul accès RAM par frame.

    Kannagi, c'est un petit peu compliqué pour moi ^^ Je vais m'en tenir à cette solution, merci quand même pour ta réponse.

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

Discussions similaires

  1. Les vertex array objects (VAO) d'OpenGL 4
    Par forum dans le forum Contribuez
    Réponses: 1
    Dernier message: 16/08/2012, 16h12
  2. [lwjgl/openGL] vertex array et drawElements
    Par tetedane1 dans le forum 3D
    Réponses: 0
    Dernier message: 24/04/2011, 13h17
  3. Réponses: 1
    Dernier message: 11/05/2007, 19h36
  4. Performances OpenGL, Vertex Array, (VBO ?)
    Par Burckel dans le forum OpenGL
    Réponses: 6
    Dernier message: 07/03/2007, 10h40

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