webgl - 在 gl.drawArraysInstanced 中绘制特定实例
问题描述
我正在使用实例化技术来渲染大量矩形,并且使用gl.drawArraysInstanced 一次性绘制所有内容效果很好。但是,我还希望对其进行更多控制并能够绘制特定或一组特定的矩形实例。
我已经研究了很长时间,但在 webgl2 中没有找到任何可以帮助我做到这一点的 API 调用。当前的规范似乎已经过时,并且它没有提供允许我利用选择性绘制实例的 API 调用。看起来我可以使用.glDrawArraysInstancedBaseInstance但它在 webgl2 中不可用。
我发现的唯一解决方案是为每个矩形创建一个额外的缓冲区,选择性地将数据从实例化缓冲区复制到它们,然后在我只需要渲染特定矩形时使用带有gl.drawArrays的附加缓冲区进行绘制。
有没有人有更好的解决方案?
解决方案
我找到了一个更好的解决方案,但并不理想。
对于特定的绘图,我像往常一样绑定实例化 vao,然后我使用 gl.vertexAttribPointer 将缓冲区指针偏移到所需的 instanceID 数据区域,并仅使用一个实例发出gl.drawArraysInstanced。
或者,当我需要绘制所有实例时,我将偏移设置回缓冲区的开头,并对所有实例发出绘图操作。
推荐阅读
- jquery - Highchart 插件 JQuery xAxis 未定义
- javascript - D3 条形图。如何根据 JSON 数据设置自定义 x 和 y 轴?
- javascript - Canvas LineTo 不工作 IOS / IPAD
- c# - 按标题排序文本文件,然后按正文
- java - cameraCharacteristics 的拆箱可能会产生 Nullpointer Exception 和 FindBugs
- sql - 拒绝两个字段中的空值
- java - Android - 如何等到 SnapshotListener 完成?
- java - 如何使用itext5在A4纸上添加两张a5纸
- hybris - 在 Hybris 中创建导出脚本,用于导出在线目录中存在但不存在于 Staged 中的所有产品
- c# - 如何将字符串列表拆分为更小的字符串列表块