无法在OpenGL中设置颜色

时间:2011-08-19 20:29:03

标签: c opengl colors vbo

我有一个OpenGL场景,作为VBO和IBO制作。 我的VBO是3个浮点数的系列:x,y,z,x,y,z,x,y,z ...... 除此之外,我有一个由3个浮点数组成的颜色数组:r,g,b,r,g,b,r,g,b ......

我的目标是第一个顶点(x = vertice [0],y = vertice [1],z = vertice [2])链接到第一个颜色(r = color [0],g = color [ 1],b =颜色[2])。 但是,我无法使用以下代码显示颜色:

    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);

上面的代码或我的阵列设置方式是否存在问题?

1 个答案:

答案 0 :(得分:3)

尝试这个序列:

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

另外,请查看docs for glBindBuffer()

  

缓冲区对象名称是无符号整数。零值保留,   但是每个缓冲区对象目标都没有默认缓冲区对象。   相反, buffer设置为零可以有效地取消绑定任何缓冲区对象   以前绑定,并恢复该缓冲区的客户端内存使用情况   对象目标