我有多个对象,每个对象都有自己的索引缓冲区、顶点缓冲区,有些具有不同的着色器或纹理,并且所有对象都具有相同的顶点格式(x、y、z、u、v、nx、ny、 nz)。我不想将我的对象批处理在一起,而是在单独的绘图调用中渲染它们。假设我想渲染 5 个不同的对象(立方体、球体等),我是否必须为每个对象创建一个新的 vao,或者有没有办法告诉 OpenGL 我想渲染 5 个不同的缓冲区相同的布局/格式?
问问题
41 次
1 回答
1
你不需要告诉OpenGL这个;您只需修改 VAO 并更改缓冲区而不更改顶点格式。
现在授予,如果不提供顶点格式参数到glVertexAttribPointer
. 所以至少,你必须记住这些参数仍然是什么。
幸运的是,存在单独的属性格式(在 GL 4.3+ 中) ,它允许您与更改顶点格式的函数分开更改缓冲区绑定(仍存储在 VAO 中)。所以你应该能够调用glBindVertexBuffer
和glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ...)
更改缓冲区。
于 2022-01-08T23:27:21.910 回答