假设您有一组vbo。 您可以创建,绑定和填充第一个,然后再打开其他。
在绘制时,您重新绑定它们并定义gl必须如何使用attribpointer提取数据。
如果我用一个几何形状填充一个缓冲区,我的代码工作正常,但现在我想为每个几何体试验单独的缓冲区。
根据我的阅读,最后,当所有状态机都设置好后,你可以只调用一次drawArrays(例如在绘制循环中)。
问题是每个vbo都有不同数量的顶点,所以我对什么是paramter感到困惑 通过drawarrays:
gl.drawArrays(gl.TRIANGLES, 0, THIS PARAMETER SHOULD TAKE CARE OF THE NUMBER OF VERTICES);
我已经尝试将每个缓冲区的顶点数加起来,但这给了我一个超出范围错误的索引。但是我如何处理每个vbo具有不同数量的顶点的事实,而我们必须在drawloop中使用(或者至少我认为是这样)一个drawcall?
编辑:我已经设法让它为每个vbo调用drawarrays。我仍然不确定这是否是最佳解决方案。答案 0 :(得分:1)
你应该为你做的每一组绑定调用drawArrays(每个几何体一次)。
更优化的解决方案是使用VertexArrayObject,然后收集那些中的绑定:
对于你可以像这样绑定的每个网格:
vao = gl.createVertexArray();
gl.bindVertexArray(vao);
//gl.bindAttribute calls
gl.bindVertexArray(null);
然后在绘制每个网格时,您可以这样做:
gl.bindVertexArray(mesh.vao);
gl.drawArrays(gl.TRIANGLES, 0, mesh.pointCount);
gl.bindVertexArray(null);