我有一个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);
上面的代码或我的阵列设置方式是否存在问题?
答案 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
设置为零可以有效地取消绑定任何缓冲区对象 以前绑定,并恢复该缓冲区的客户端内存使用情况 对象目标。