我目前正在构建一个体素引擎(例如 Minecraft),并且我正在使用 opengl。
引擎的当前设计如下所示:
类 Map -> 包含 2d 块数组(std::vector 的 std::vector)
类 Chunk -> 包含块的 3d 数组(也使用 std::vector)
类 Block -> 包含块的顶点。(立方体,由 12 个三角形组成);
我想要做的是让每个块都有一个 draw() 函数,它将绘制块中的所有块。我想我会使用 glGenBuffers() 为每个块创建一个缓冲区。从我阅读的教程中,应该首先使用 glVertexArray 创建一个顶点数组,然后绑定它,然后使用目标 GL_ARRAY_BUFFER 将缓冲区绑定到它并用数据填充它。
到目前为止,我设法使用使用 glGenBuffers() 在块中创建的缓冲区来渲染具有多个块的单个块,但在主函数中我创建 glVertexArray 并绑定它,而不是在块中调用 draw() 函数使用 glDrawArrays() 绑定块的缓冲区和绘图。
我的问题是,为每个块创建一个 VBO 是否正确?我也需要为每个块创建一个 glVertexArray 吗?或者我应该为所有块使用一个并且每次绑定另一个 VBO?
我试图通过教程和 opengl wiki 更多地研究 VAO 和 VBO,但到目前为止我还没有完全理解它是如何工作的以及应该如何正确使用它。