Webgl用两种不同的vbo绘制两种不同的几何形状

时间:2014-12-01 10:11:58

标签: javascript opengl-es webgl

假设您有一组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。我仍然不确定这是否是最佳解决方案。

1 个答案:

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