0

我正在研究基于体素的游戏引擎,其中我需要有块。我试图从 minecraft 中阅读 Chunk 类,但我无法理解。我的意思是块:16x16x256 块数组

所以我的问题是:块如何工作以及它如何存储数据?

4

1 回答 1

1

我的意思是块:16x16x256 块数组

好吧,这违背了一些几何结构。如果这是一个类似 Micraft 的游戏,那么一个方块要么被填满,要么就是空的。您是否希望这些块具有不同的类型,或者只是“那里”或“不那里”。

可以说,为了简单起见,您希望一个块具有 2^CHAR_BIT 不同的状态(CHAR_BIT 在大多数系统上为 8)。状态 0 表示无效。所以你可以将这些块存储在结构的数组中

char chunk[16][16][256];

您可以将其封装在一个类中。

class Chunk
{
private:
    char chunk[16][16][256];
}

当然,你的世界由不止一个块组成,你可能会将你的块排列在一个网格中,每个网格单元占据一个块

class ChunkGrid
{
private:
    std::list<Chunk> chunks;

当然,您还希望在空间细分结构中组织这些块,以便您可以根据它们在世界中的位置快速索引块,八叉树非常适合

    class ChunkOctree
    {
    private:
        union Fork
        {
            ChunkOctree *branch;
            Chunk *leaf;
        };
        Fork forking[2][2][2];
    }

你还需要一些函数来遍历这个结构,但我会把研究留给你,作为一个学习经验。我给了你很多关键词来搜索互联网。

}
于 2012-03-31T12:15:12.667 回答