Javascript Webgl使用两种不同的vbo绘制两种不同的几何图形

Javascript Webgl使用两种不同的vbo绘制两种不同的几何图形,javascript,opengl-es,webgl,Javascript,Opengl Es,Webgl,假设您有一个vbo数组。 首先创建、绑定和填充,然后使用其他对象继续创建、绑定和填充 在绘图时,您可以重新绑定它们,并定义gl必须如何使用attribpointer提取数据 如果我用所有的几何体填充一个缓冲区,我的代码工作得很好,但是现在我想为每个几何体使用单独的缓冲区 根据我所读到的,在最后,当所有的状态机都设置好后,您可以只调用一次DrawArray(例如在draw循环中) 问题是每个vbo都有不同数量的顶点,所以我不知道是什么参数 要在DrawArray上传递,请执行以下操作: gl.dr

假设您有一个vbo数组。 首先创建、绑定和填充,然后使用其他对象继续创建、绑定和填充

在绘图时,您可以重新绑定它们,并定义gl必须如何使用attribpointer提取数据

如果我用所有的几何体填充一个缓冲区,我的代码工作得很好,但是现在我想为每个几何体使用单独的缓冲区

根据我所读到的,在最后,当所有的状态机都设置好后,您可以只调用一次DrawArray(例如在draw循环中)

问题是每个vbo都有不同数量的顶点,所以我不知道是什么参数 要在DrawArray上传递,请执行以下操作:

gl.drawArrays(gl.TRIANGLES, 0, THIS PARAMETER SHOULD TAKE CARE OF THE NUMBER OF VERTICES);
我尝试将每个缓冲区的顶点数相加,但这会给我一个索引超出范围的错误。但是我如何处理这样一个事实:每个vbo都有不同数量的顶点,而我们必须在drawloop中使用(或者至少我认为是这样)一个drawcall


编辑:我已经设法让它为每个vbo调用DrawArray。我仍然不确定这是否是最佳解决方案。

您应该为所做的每一组绑定调用DrawArray(每个几何体一次)

更理想的解决方案是使用,然后收集以下绑定:

对于每个网格,可以这样绑定:

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