1

我有一个 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);

上面的代码是否有问题,或者我的数组的设置方式有问题?

4

1 回答 1

3

试试这个序列:

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

另外,请查看以下文档glBindBuffer()

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

于 2011-08-19T20:37:34.167 回答