OpenGL 3 VBO索引多个图形(GLD元素)
我正在使用OpenGL(3.x)完成我的第一步,我计划使用VAO和VBO绘制几个图形(三角形、立方体等): 现在我得到了以下设置: VAO--> VBO[顶点,颜色]+VBO[索引] 其中“顶点”具有[3*3三角形的浮点数,8*3立方体的浮点数], “颜色”具有每个顶点的RGB(无alpha), “指数”有[三角形:0,1,2,正方形:0,1,2,0,2,3,…] 现在如果我用“元素”画图。我只看到序列上正确绘制的第一个图形(并获得正确的颜色),第二个图形不能正常工作 因此,如果我首先渲染三角形数据,结果如下: 如果我先渲染立方体,它会像: 注意:三角形是红色的,立方体是彩色的,所以第一个图形总是按照我的预期显示 这可以使用“glDrawArrays”(使用偏移量+三角形计数)而不是抽屉元素来确定图形数组,但是,当然,索引使数据数组变得更小。所以我想搬家 如何绘制相同的设置,但要使用索引?我应该调用其他方法吗? 这是我用来准备VBO数据的代码,以防有疑问OpenGL 3 VBO索引多个图形(GLD元素),opengl,indexing,figure,Opengl,Indexing,Figure,我正在使用OpenGL(3.x)完成我的第一步,我计划使用VAO和VBO绘制几个图形(三角形、立方体等): 现在我得到了以下设置: VAO--> VBO[顶点,颜色]+VBO[索引] 其中“顶点”具有[3*3三角形的浮点数,8*3立方体的浮点数], “颜色”具有每个顶点的RGB(无alpha), “指数”有[三角形:0,1,2,正方形:0,1,2,0,2,3,…] 现在如果我用“元素”画图。我只看到序列上正确绘制的第一个图形(并获得正确的颜色),第二个图形不能正常工作 因此,如果我首先渲染三角形
// VBOS solid
glBindBuffer(GL_ARRAY_BUFFER, vboSolid[0]);
glBufferData(GL_ARRAY_BUFFER, vertices.size()*sizeof(GLfloat),&vertices[0], GL_STATIC_DRAW);
glVertexAttribPointer((GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vboSolid[1]);
glBufferData(GL_ARRAY_BUFFER, colors.size()*sizeof(GLfloat),&colors[0], GL_STATIC_DRAW);
glVertexAttribPointer((GLuint)1, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(1);
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, vboIndex );
glBufferData( GL_ELEMENT_ARRAY_BUFFER, indices.size()*sizeof(GLuint),&indices[0], GL_STATIC_DRAW);
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 );
这就是我在渲染时所做的调用。
在这个循环中,三角形的指示器count=3和offset=0,而立方体的指示器分别为24和3
glDrawElements(
GL_TRIANGLES,
primitives[i]->indicesCount,
GL_UNSIGNED_INT,
(void*) (primitives[i]->offsetIndices*sizeof(GLuint))
);
由于我在发布后仍在进行测试,我最终进行了一次工作尝试,使用:
glDrawElementsBaseVertex(
GL_TRIANGLES.
__INDICES_TO_RENDER__,
GL_UNSIGNED_INT,
(void*) (__INDICES_RENDERED___*sizeof(GLuint)),
_VERTICES_RENDERED_BEFORE_
);
其中“索引到渲染”和“索引到渲染”是计数为3f的值,因此对于立方体,使用24个浮点数作为值“到渲染”,0到“渲染”
“_顶点_渲染_在u之前”作为渲染顶点的人类值工作,因此在渲染立方体之前,它是0,之后,它应该是8
有点奇怪(可能是我做错了什么),但它在我的测试中起了作用:
当时有人说,但我试了好几次,直到我找到了电话的内容
如果专家能够验证这一点,我会更高兴:p.因为我在发布后仍在进行测试,所以我最终进行了一次工作尝试,使用:
glDrawElementsBaseVertex(
GL_TRIANGLES.
__INDICES_TO_RENDER__,
GL_UNSIGNED_INT,
(void*) (__INDICES_RENDERED___*sizeof(GLuint)),
_VERTICES_RENDERED_BEFORE_
);
其中“索引到渲染”和“索引到渲染”是计数为3f的值,因此对于立方体,使用24个浮点数作为值“到渲染”,0到“渲染”
“_顶点_渲染_在u之前”作为渲染顶点的人类值工作,因此在渲染立方体之前,它是0,之后,它应该是8
有点奇怪(可能是我做错了什么),但它在我的测试中起了作用:
当时有人说,但我试了好几次,直到我找到了电话的内容
如果专家能证实这一点,我会更高兴:p