【发布时间】:2016-04-16 18:39:34
【问题描述】:
通常我会尝试将特定于网格的信息 (VBO/VAO) 与特定于实例的信息(变换、制服等)分开。
通过这种方式,操作实例信息的部分代码不需要了解有关 VBO/VAO 的任何信息,反之亦然。
但是,最近我开始使用 glDrawInstanced 使用硬件实例化,而实例属性在 VAO 中绑定在一起的事实使我的关注点分离变得更加困难。
原因是通常 VBO/VAO 是从我的 .OBJ 加载器(它包含构建它所需的所有信息)构建的,然后代码的其他部分只担心着色器制服。现在,这些部分代码需要了解 VAO 的结构,以便附加有关其实例属性的信息。
当我有可用于正常渲染和实例化渲染的 VBO 时,这变得更加烦人。
是否有推荐的方法可以在设置网格属性和实例属性之间保持关注点分离?
我想有两个 VAO,一个用于普通渲染,另一个用于实例渲染,我将添加我需要的额外实例属性,但我发现无法复制或检查原始 VAO 数据,所以我的组件似乎需要了解 VBO/VAO 的实际结构,而不仅仅是实例参数。
【问题讨论】:
-
在您的几何图形上创建另一个抽象级别,它将以指定的方式(有或没有实例化)创建和绘制成批数据。
-
是的,这正是我希望避免的......如果没有其他建议出现,我最终会这样做。
标签: opengl opengl-4 geometry-instancing