0

当我从文件中导入模型时,它们通常是由多个网格组合而成的。目前,我正在从第一个网格创建一个 VBO,因为我不知道如何与其他网格打交道。

glGenVertexArrays(1, &m_VAO);
glBindVertexArray(m_VAO);

const Mesh & mesh = m_modelAsset->meshes[0];
glGenBuffers(1, &m_VBO[0]);

glBindBuffer(GL_ARRAY_BUFFER, m_VBO[0]);
glBufferData(GL_ARRAY_BUFFER, mesh.vertices.size() * sizeof(Vertex), mesh.vertices.data(), GL_STATIC_DRAW);

glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, position));

glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, normal));

glEnableVertexAttribArray(2);
glVertexAttribPointer(2, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, color));

如果我遍历每个网格和gen其他缓冲区,我不知道如何告诉 opengl 它应该如何处理内存glVertexAttribPointer。如果我用相同的索引调用它,它会覆盖以前存储的数据,不是吗?

4

1 回答 1

0

如果我用相同的索引调用它,它会覆盖以前存储的数据,不是吗?

是的。所以……不要那样做。

如果要在同一个缓冲区中存储多个网格,则必须使用同一个缓冲区。这意味着您不能单独加载每个网格;您必须一次全部加载它们,合并它们的数据,然后将其粘贴到单个缓冲区中。

本质上,您正在定义一个大顶点数组,恰好在逻辑上定义了多个不同的网格。

于 2021-09-27T14:00:29.813 回答