如何在3D世界中创建一个块?

时间:2012-03-31 11:54:09

标签: java minecraft voxel

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

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

1 个答案:

答案 0 :(得分:1)

  

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

那么,那就违背了一些几何结构。如果这是一个Micraft-esque游戏,那么一个块要么被填充,要么它是无效的。你想要那些块是不同的类型,或只是“那里”或“不存在”。

让我们说,为了简单起见,您希望块具有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];
    }

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

}