我有 2 个不同的对象,我想在一个场景中渲染它们。
当我初始化第一个对象时,我称之为代码:
float f[] = {
-0.1f, 0.1f, 0.1f,
0.1f, 0.1f, 0.1f,
0.1f,-0.1f, 0.1f,
-0.1f,-0.1f, 0.1f,
-0.1f, 0.1f,-0.1f,
0.1f, 0.1f,-0.1f,
0.1f,-0.1f,-0.1f,
-0.1f,-0.1f,-0.1f
};
float c[] = {
1.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 1.0f,
1.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 1.0f,
1.0f, 0.0f, 0.0f,
1.0f, 0.0f, 0.0f,
};
unsigned int indarr[] = {2,3,6,7,4,3,0,2,1,6,5,4,1,0};
glGenBuffers(2, vbo);
pos = vbo[0]; // Der Buffer für die Position
col = vbo[1]; // Der BUffer für die Farbe
glBindBuffer(GL_ARRAY_BUFFER, pos);
glBufferData(GL_ARRAY_BUFFER, sizeof(f),f,GL_STATIC_DRAW); // Befüllen
glBindBuffer(GL_ARRAY_BUFFER, col);
glBufferData(GL_ARRAY_BUFFER, sizeof(c),c,GL_STATIC_DRAW); // Befüllen
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, pos);
glVertexAttribPointer(0, 3, GL_FLOAT,GL_FALSE, 3*sizeof(float),0);
glBindBuffer(GL_ARRAY_BUFFER, col);
glVertexAttribPointer(1, 3, GL_FLOAT,GL_FALSE, 3*sizeof(float),0);
glGenBuffers(1, &ind);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ind);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indarr),indarr,GL_STATIC_DRAW);
这是渲染函数内部的代码:
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ind);
glBindVertexArray( vao );
glDrawElements(GL_TRIANGLE_STRIP, 14, GL_UNSIGNED_INT, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
当我在场景中渲染这个对象时,一切正常。当我尝试创建另一个对象时,问题就开始了。代码看起来像上面的示例,唯一的区别是,我更改了 f、c 和 intarr 数组。因为对象应该看起来不同。在第二个对象中我不需要这么多顶点,所以我改变了 indarr[](我把它缩短了)。问题是,第一个对象似乎受到了这种变化的影响。
场景看起来像
obj1->render();
obj2->render();
有人可以帮我看看会发生什么吗?尤其是为什么它们会相互影响?
编辑:
嗯,我终于修复了错误,
旧的渲染函数如下所示:
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ind);
glBindVertexArray( vao );
glDrawElements(GL_TRIANGLE_STRIP, 14, GL_UNSIGNED_INT, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
我把它改成这样:
glBindVertexArray( vao );
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ind);
glDrawElements(GL_TRIANGLE_STRIP, 14, GL_UNSIGNED_INT, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
现在它可以工作了。我仍然不明白为什么会发生错误。也许有人现在可以解释一下吗?