0

所以我最近了解了 VAO(顶点数组对象),到目前为止它们看起来非常棒,但我有一个我似乎无法解决的问题。我有一堆模型,它们的顶点状态存储在单独的 VAO 中,所以一次调用

    glBindVertexArray(VAO);

就是开始绘制这个实例所需要的一切。问题在于我必须绑定一个额外的 VAO,一个包含一个

    glDrawElementsInstanced();

称呼。所以它包含偏移量、UV 偏移量、颜色叠加等数据。当我绑定它时,前一个似乎解除了自身绑定,我猜这在 OpenGL 中是有道理的,但我不知道该怎么做才能让两者都处于活动状态?

这个想法是绘制所有共享相同模型的静态对象,而不需要每帧上传任何数据。这完全是错误的方法吗?

4

1 回答 1

3

当我绑定它时,前一个似乎解除了自身绑定,我猜这在 OpenGL 中是有道理的,但我不知道该怎么做才能让两者都处于活动状态?

当然是解绑。这就是 OpenGL 的工作原理。它是一个状态机,您希望同时激活两个状态。

这个想法是绘制所有共享相同模型的静态对象,而不需要每帧上传任何数据。

如果它们不改变,那么就不要改变它们。您只需绑定并激活顶点组件(如此所述)。

于 2013-11-05T16:53:55.790 回答