首页 > 解决方案 > 在 gl.drawArraysInstanced 中绘制特定实例

问题描述

我正在使用实例化技术来渲染大量矩形,并且使用gl.drawArraysInstanced 一次性绘制所有内容效果很好。但是,我还希望对其进行更多控制并能够绘制特定或一组特定的矩形实例。

我已经研究了很长时间,但在 webgl2 中没有找到任何可以帮助我做到这一点的 API 调用。当前的规范似乎已经过时,并且它没有提供允许我利用选择性绘制实例的 API 调用。看起来我可以使用.glDrawArraysInstancedBaseInstance但它在 webgl2 中不可用。

我发现的唯一解决方案是为每个矩形创建一个额外的缓冲区,选择性地将数据从实例化缓冲区复制到它们,然后在我只需要渲染特定矩形时使用带有gl.drawArrays的附加缓冲区进行绘制。

有没有人有更好的解决方案?

标签: webglwebgl2

解决方案


我找到了一个更好的解决方案,但并不理想。

对于特定的绘图,我像往常一样绑定实例化 vao,然后我使用 gl.vertexAttribPointer 将缓冲区指针偏移到所需的 instanceID 数据区域,仅使用一个实例发出gl.drawArraysInstanced

或者,当我需要绘制所有实例时,我将偏移设置回缓冲区的开头,并对所有实例发出绘图操作。


推荐阅读