我目前将世界的体积数据存储为布尔数组。然后我检查每个空块,如果它有非空邻居,则绘制面。这可以防止我使用 opengl 向显卡发送一堆面孔。
我现在正在插入和删除块,但我不知道如何快速做到这一点。更改体积数据很简单,但我不想每次有人插入或删除块时都从体积数据中重新计算所有顶点。我想到只是将块添加到现有顶点数据末尾的顶点缓冲区,但是我没有很好的方法来破坏它,因为我无法在体积和顶点缓冲区数据之间建立关联。
任何帮助表示赞赏。
我目前将世界的体积数据存储为布尔数组。然后我检查每个空块,如果它有非空邻居,则绘制面。这可以防止我使用 opengl 向显卡发送一堆面孔。
我现在正在插入和删除块,但我不知道如何快速做到这一点。更改体积数据很简单,但我不想每次有人插入或删除块时都从体积数据中重新计算所有顶点。我想到只是将块添加到现有顶点数据末尾的顶点缓冲区,但是我没有很好的方法来破坏它,因为我无法在体积和顶点缓冲区数据之间建立关联。
任何帮助表示赞赏。
Octree可能会帮助您重新计算刚刚更改的块。
我想你可能想给它添加“算法”标签。我认为真正的《我的世界》的工作方式是存储 16x16x16 的块,每次更新一个小块时,它都会重新更新那个大块的顶点信息。
这是我的理解,我可能是非常错误的。我相信你可以通过互联网和我的世界论坛了解更多关于这方面的信息。那里有很多我的世界算法讨论。