我想要做的是使用相同的vbo多次渲染网格但具有不同的偏移.例:
//Load VBO
glGenBuffers(2, &bufferObjects[0]);
glBindBuffer(GL_ARRAY_BUFFER, bufferObjects[VERTEX_DATA]);
glBufferData(GL_ARRAY_BUFFER, sizeof(float)*size(vertices)*3, &vertices[0], GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufferObjects[INDEX_DATA]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(int)*size(indices), &indices[0], GL_STATIC_DRAW);
//Render VBO
glBindBuffer(GL_ARRAY_BUFFER, bufferObjects[VERTEX_DATA]);
glVertexPointer(3, GL_FLOAT, 0, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufferObjects[INDEX_DATA]);
glDrawElements(renderFlag, nrIndices, GL_UNSIGNED_INT, 0);
Run Code Online (Sandbox Code Playgroud)
如果我同时绘制孔网格没有问题,但是可以使用不同的起始索引绘制相同的网格,如下所示:
glDrawElements(renderFlag, 20, GL_UNSIGNED_INT, "WHAT TO WRITE HERE"?);
Run Code Online (Sandbox Code Playgroud)
Nic*_*las 26
你是什么意思"开始索引"?你可能意味着两件事之一:
好吧,就这样做.glDrawElements将一个偏移量放入缓冲区对象中,以便从中开始拉取索引.所以添加一个值.
glDrawElements(renderFlag, 20, GL_UNSIGNED_INT, (void*)(ixStart * sizeof(GLuint)));
Run Code Online (Sandbox Code Playgroud)
这意味着您要绘制相同范围的索引,但是您希望将偏移量应用于这些索引值本身.因此,如果您的索引缓冲区如下所示:(1,4,2,0,5,...),并且您应用偏移量20,那么它将获取这些索引:(21,24,22,20,25) ,...).
这是完成的glDrawElementsBaseVertex.它看起来像这样:
glDrawElementsBaseVertex(renderFlag, 20, GL_UNSIGNED_INT, 0, offset);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10823 次 |
| 最近记录: |