0

我有多个对象,每个对象都有自己的索引缓冲区、顶点缓冲区,有些具有不同的着色器或纹理,并且所有对象都具有相同的顶点格式(x、y、z、u、v、nx、ny、 nz)。我不想将我的对象批处理在一起,而是在单独的绘图调用中渲染它们。假设我想渲染 5 个不同的对象(立方体、球体等),我是否必须为每个对象创建一个新的 vao,或者有没有办法告诉 OpenGL 我想渲染 5 个不同的缓冲区相同的布局/格式?

4

1 回答 1

1

你不需要告诉OpenGL这个;您只需修改 VAO 并更改缓冲区而不更改顶点格式。

现在授予,如果不提供顶点格式参数到glVertexAttribPointer. 所以至少,你必须记住这些参数仍然是什么。

幸运的是,存在单独的属性格式(在 GL 4.3+ 中) ,它允许您与更改顶点格式的函数分开更改缓冲区绑定(仍存储在 VAO 中)。所以你应该能够调用glBindVertexBufferglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ...)更改缓冲区。

于 2022-01-08T23:27:21.910 回答