我搞砸了一个用 C++/OpenGL 创建 2D 墙的简单概念。每面墙由 4 个顶点描述,水平或垂直延伸,并且还具有颜色。如果它们发生碰撞,墙壁就会相互连接。由墙壁形成的周边由简单的矩形填充。
我的想法是将许多墙的顶点数据存储在一个 VBO 中。或者每个属性有多个,然后放在 VAO 中?在一个 VBO 中交错并通过 VAO 访问?无论如何,一个物体中有许多墙。如果我存储的任何空间都用完了,请制作另一个 VBO(或我正在使用的任何东西)来存储另一组墙。我还希望有相交的墙,例如以直角,共享顶点以节省空间。
但是,墙是可变的,因此可以随时添加、移动或删除顶点。这将需要跟踪 VBO 中的空闲块,然后根据需要将墙数据分配给它们。这也意味着如果我有多个 VBO,共享顶点的 2 个墙必须在同一个 VBO 中,这可能会引起各种头痛。但同时,我不想为每一面墙都做一个VBO,这最多不过是一个非常简单的4个顶点的东西。
原始图像发生的一些更改示例:
这种情况通常如何处理?是否需要滚动我自己的内存分配方案才能与 VBO 一起使用,或者是否有一个不需要太多工作的适当快速的解决方案?