通常我会尝试将特定于网格的信息(VBO/VAO)与特定于实例的信息(变换、制服等)分开。
通过这种方式,操作实例信息的部分代码不需要知道任何关于 VBO/VAO 的信息,反之亦然。
然而,最近我开始使用 glDrawInstanced 使用硬件实例化,而实例属性在 VAO 中绑定在一起的事实使我的关注点分离变得更加困难。
原因是通常 VBO/VAO 是从我的 .OBJ 加载器(它具有构建它所需的所有信息)构建的,然后代码的其他部分只担心着色器制服。现在,代码的这些部分需要了解 VAO 的结构,以便附加有关其实例属性的信息。
当我有可用于正常渲染和实例化渲染的 VBO 时,这变得更加烦人。
是否有推荐的方法可以在设置网格属性和实例属性之间保持关注点的分离?
我想有两个 VAO,一个用于普通渲染,另一个用于实例渲染,我将添加我需要的额外实例属性,但我发现无法复制或检查原始 VAO 数据,所以似乎我的组件需要知道VBO/VAO 的实际结构,而不仅仅是实例参数。