【问题标题】:Draw multiple buffers with the same vertex layout绘制具有相同顶点布局的多个缓冲区
【发布时间】:2022-01-08 20:49:35
【问题描述】:

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

【问题讨论】:

    标签: opengl vertex-buffer vertex-array-object


    【解决方案1】:

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

    现在,如果不向glVertexAttribPointer 提供顶点格式参数,您将无法做到这一点。所以至少,你必须记住那些参数仍然是什么。

    幸运的是,separate attribute format exists (in GL 4.3+),它允许您更改缓冲区绑定(仍存储在 VAO 中)separately from the functions that change the vertex format。所以你应该能够调用glBindVertexBufferglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ...) 来更改缓冲区。

    【讨论】:

    • 只是想知道我理解你的意思,我需要生成 1 个 VAO,n 个缓冲区,绑定 VAO 一次,然后在渲染每个对象之前,绑定它的缓冲区并将其链接到该边界VAO 通过 glVertexAttribPointer()。所以,如果我渲染 5 个对象,我会调用 glVertexAttribPointer() 5 次。这就是你的意思吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多