【问题标题】:Drawing multiple objects with glDrawArrays使用 glDrawArrays 绘制多个对象
【发布时间】:2017-03-12 13:04:06
【问题描述】:

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

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

绘制代码:

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

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

【问题讨论】:

    标签: c++ opengl vbo


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多