2011-08-19 2 views
1

J'ai une scène OpenGL, faite comme VBO et IBO. Mon VBO est une série de 3 flotteurs: x, y, z, x, y, z, x, y, z ... En plus de cela, j'ai une matrice de couleurs composée de 3 flotteurs: r, g, b, r, g, b, r, g, b ...Impossible de définir les couleurs dans OpenGL

Mon objectif est que le premier sommet (x = vertice [0], y = vertice [1], z = vertice [2]) est liée à la première couleur (r = couleur [0], g = couleur [1], b = couleur [2]). Je suis cependant incapable d'afficher les couleurs avec le code ci-dessous:

glGenBuffers(1, &VertexVBOID); 

    glBindBuffer(GL_ARRAY_BUFFER, VertexVBOID); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat)*nbVertex*3, glVertex, GL_STATIC_DRAW); 

    glGenBuffers(1, &IndexVBOID); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IndexVBOID); 
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(int)*nbVBOInd, VBOInd, GL_STATIC_DRAW); 

    glEnableClientState(GL_VERTEX_ARRAY); 
    glEnableClientState(GL_COLOR_ARRAY); 

    glBindBuffer(GL_ARRAY_BUFFER, VertexVBOID); 
    glVertexPointer(3, GL_FLOAT,0,0); 
    glColorPointer(3, GL_FLOAT, 0, glColors); 

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IndexVBOID); 

    glDrawElements(GL_TRIANGLES, nbVBOInd, GL_UNSIGNED_INT, 0); 

Y at-il un problème dans le code ci-dessus, ou la façon dont mon tableau est mis en place?

Répondre

3

Donnez cette séquence un essai:

glBindBuffer(GL_ARRAY_BUFFER, VertexVBOID); 
glVertexPointer(3, GL_FLOAT,0,0); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 
glColorPointer(3, GL_FLOAT, 0, glColors); 

Aussi, regardez les docs for glBindBuffer():

noms d'objets tampons sont des entiers non signés. La valeur zéro est réservée, mais il n'y a pas d'objet tampon par défaut pour chaque cible d'objet tampon. Au lieu de cela, buffer mis à zéro dissocie efficacement tout objet tampon précédemment lié, et restaure l'utilisation de la mémoire client pour ce tampon cible objet.

+0

Vous êtes un roi, merci !! –

Questions connexes