C++ 使用GLDrawArray绘制多个对象

C++ 使用GLDrawArray绘制多个对象,c++,opengl,vbo,C++,Opengl,Vbo,更新:进一步调查后,似乎正在切换导致第二个对象无法绘制的程序。我不知道为什么。两个对象使用基本相同的GLSL 我有预感我没有正确使用缓冲区。我定义了一个立方体和一个棱镜。如果我注释掉prism的draw调用,立方体就会绘制。否则,只有棱镜绘制。我错过了什么 绘图代码: glUseProgram(cubeProgram); glBindBuffer(GL_ARRAY_BUFFER, vertexArrayBuffers[0]); glVertexAttribPointer(cVPos, 4, G

更新:进一步调查后,似乎正在切换导致第二个对象无法绘制的程序。我不知道为什么。两个对象使用基本相同的GLSL

我有预感我没有正确使用缓冲区。我定义了一个立方体和一个棱镜。如果我注释掉prism的draw调用,立方体就会绘制。否则,只有棱镜绘制。我错过了什么

绘图代码:

glUseProgram(cubeProgram);
glBindBuffer(GL_ARRAY_BUFFER, vertexArrayBuffers[0]);

glVertexAttribPointer(cVPos, 4, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));

glEnableVertexAttribArray(cVPos);

glBindBuffer(GL_ARRAY_BUFFER, vertexArrayBuffers[1]);
glVertexAttribPointer(cNormID, 4, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));
glEnableVertexAttribArray(cNormID);

glDrawArrays(GL_TRIANGLES, 0, 36);

glUseProgram(priProgram);

glBindBuffer(GL_ARRAY_BUFFER, vertexArrayBuffers[2]);

glVertexAttribPointer(pVPos, 4, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));

glEnableVertexAttribArray(pVPos);

glBindBuffer(GL_ARRAY_BUFFER, vertexArrayBuffers[3]);
glVertexAttribPointer(pNormID, 4, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));
glEnableVertexAttribArray(pNormID);

glDrawArrays(GL_TRIANGLES, 0, 64);
VBO创建:

glGenBuffers(4, vertexArrayBuffers);

glBindBuffer(GL_ARRAY_BUFFER, vertexArrayBuffers[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(cubeVerts), cubeVerts, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, vertexArrayBuffers[1]);
glBufferData(GL_ARRAY_BUFFER, sizeof(cubeNorms), cubeNorms, GL_STATIC_DRAW);


glBindBuffer(GL_ARRAY_BUFFER, vertexArrayBuffers[2]);

glBufferData(GL_ARRAY_BUFFER, sizeof(priVerts), priVerts, GL_STATIC_DRAW);

glBindBuffer(GL_ARRAY_BUFFER, vertexArrayBuffers[3]);
glBufferData(GL_ARRAY_BUFFER, sizeof(priNorms), priNorms, GL_STATIC_DRAW);

如果需要更多代码,请告诉我。

所以是我的GLSL导致了问题。我调用了一个函数来设置着色器的变量,其中一个似乎没有设置。我在画完第一个对象后回忆起函数,他们都画了。万岁

所以是我的GLSL造成了问题。我调用了一个函数来设置着色器的变量,其中一个似乎没有设置。我在画完第一个对象后回忆起函数,他们都画了。万岁