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 :

Ajout de couleurs à un objet géré avec les VBO.


Sujet :

OpenGL

  1. #1
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut Ajout de couleurs à un objet géré avec les VBO.
    Bonjour !

    voila,

    J'ai (enfin) réussi à afficher mon objet via les VBO ! Youpi.

    Je souhaite maintenant y appliquer de la couleur.

    J'ai fais ce bout de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                VBOid1 = GL.GenBuffer();
                GL.BindBuffer(BufferTarget.ArrayBuffer, VBOid1);
                GL.BufferData(BufferTarget.ArrayBuffer, countc + countv, new IntPtr(0), BufferUsageHint.StaticDraw);
                GL.BufferSubData(BufferTarget.ArrayBuffer, new IntPtr(0), countv, xyz);
                GL.BufferSubData(BufferTarget.ArrayBuffer, new IntPtr(countv), countc, xyzcolor);
                GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
    avec:
    countc: taille du buffer de vectices
    countv: taille du buffer de couleurs (avec pour chaque vectice: rgba))
    xyz = buffer de vectices
    xyzcolor= buffer de couleurs

    Ensuite pour afficher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                GL.EnableVertexAttribArray(0);
                GL.EnableVertexAttribArray(1);
                GL.BindBuffer(BufferTarget.ArrayBuffer, VBOid1 );       
                GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, 0, 0);     
                GL.VertexAttribPointer(1, 4, VertexAttribPointerType.Float, false, 0, countv);
                GL.DrawArrays(BeginMode.Lines, 0, (xyz.Length / 3) + (xyzcolor.Length / 4));
                GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
    L'object s'affiche bien sans probleme, mais pas aux couleurs souhaitées....

    Avez vous une idée d'ou ca peut venir ?
    Merci.

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Dans countv, c'est la taille en octets ? ou juste le nombre de composants ?
    Quels sont les couleurs affichées ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GL.DrawArrays(BeginMode.Lines, 0, (xyz.Length / 3) + (xyzcolor.Length / 4));
    J'aurais cru que c'était simplement le nombre d'éléments (de sommets).
    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é Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    Salut,

    Merci de ta réponse,

    En faite, countv, c'est la taille en octets de mes sommets en mémoire (nombre de sommets x 3 composantes x sizeof(float))

    Sinon, j'ai réussi à faire le code pour afficher mon object avec les couleurs
    C'est cool.

    Bon après c'est vrai que je n'aurai pas du faire de variables aussi obscures.

    xyz.Length correspond au nombre de composantes xyz de tous les sommets (3x nombre de sommets).

    Les couleurs affichées sont du rgba, d'où le "/4" pour le vecteurs composantes couleurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                GL.Enable(EnableCap.Blend);
                GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
                GL.Translate(translateX, translateY, translateZ);
                GL.EnableClientState(ArrayCap.VertexArray);
                GL.EnableClientState(ArrayCap.ColorArray);
     
                GL.BindBuffer(BufferTarget.ArrayBuffer, VBOid1);
     
                GL.VertexPointer(3, VertexPointerType.Float, 0, 0);    
                GL.ColorPointer(4, ColorPointerType.Float, 0, countv);
                GL.DrawArrays(BeginMode.Quads, 0, (xyz.Length / 3));
                GL.BindBuffer(BufferTarget.ArrayBuffer, 0);

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Arf, j'avais raison pour le DrawArrays
    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.

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

Discussions similaires

  1. Un tableau d'objets, direct avec les accolades
    Par TotorolePacha dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 17/05/2013, 15h06
  2. Comment ajouter une chaîne dans une liste avec les API Windows ?
    Par DelphiCool dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 02/02/2013, 13h47
  3. changer la couleur d'un edit avec les messages
    Par David dans le forum API, COM et SDKs
    Réponses: 22
    Dernier message: 20/09/2011, 23h05
  4. Copier un objet axes avec les data cursor
    Par 65days dans le forum Interfaces Graphiques
    Réponses: 7
    Dernier message: 17/08/2009, 09h11
  5. Modifier la couleur d'un STATIC avec les API windows
    Par Mirsa dans le forum Visual C++
    Réponses: 31
    Dernier message: 27/11/2006, 11h18

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