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

Webgl drawing two different geometries with two different vbo

本文关键字:两个 几何形 绘制 Webgl vbo      更新时间:2023-09-26

>假设你有一个vbo数组。您首先创建,绑定和填充,然后与其他创建,绑定和填充。

在绘制时,您可以重新绑定它们并定义 gl 必须如何使用属性点提取数据。

如果我用所有几何形状填充一个缓冲区,我的代码工作正常,但现在我想为每个几何体尝试单独的缓冲区。

根据我所读到的内容,最后,当所有状态机都设置好时,你只能调用一次drawArrays(例如在draw循环中(。

问题是每个vbo都有不同数量的顶点,所以我对什么参数感到困惑在绘制阵列处传递:

gl.drawArrays(gl.TRIANGLES, 0, THIS PARAMETER SHOULD TAKE CARE OF THE NUMBER OF VERTICES);

尝试将每个缓冲区的顶点计数相加,但这给了我一个超出范围的索引错误。但是我如何处理每个 vbo 都有不同数量的顶点而我们必须在绘制循环中只使用(或至少我认为是这样(一个绘制调用的事实?

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

您应该为执行的每组绑定调用 drawArray(每个几何体一次(。

更优化的解决方案是使用 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);