如何使用实例化渲染将每个实例的数据(如定位)传递给 OpenGL 3.2 中的着色器

How to pass per-instance data (such as positioning) to shader in OpenGL 3.2 with instanced rendering?

本文关键字:OpenGL 实例化 何使用 数据 实例 定位      更新时间:2023-10-16

我正在尝试使用实例化渲染来渲染立方体。我让它工作,我用glDrawArraysInstanced渲染。

但是,我现在想将每个实例的数据(在本例中为定位和颜色)传递给着色器,并且我已经理解我打算使用函数glVertexAttribDivisor来实现这一点。问题是该功能仅在 OpenGL 3.3 及更高版本中可用,而我使用的是 3.2

如何在OpenGL 3.2中以正确的方式实现这一目标?

可选解决方案:

使用几何着色器渲染点并发出立方体。然后,您可以将所有内容打包到一个 VBO 中,避免实例化渲染。

如果需要,使用转换反馈来修改多维数据集属性。

我在 3.2 中没有找到一种很好的方法来做我想做的事情,所以我更新到 OpenGL 3.3 而不是能够使用 glVertexAttribDivisor 在属性中发送实例数据。