我正在研究基于体素的游戏引擎,其中我需要有块。我试图从 minecraft 中阅读 Chunk 类,但我无法理解。我的意思是块:16x16x256 块数组
所以我的问题是:块如何工作以及它如何存储数据?
我的意思是块: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];
}
你还需要一些函数来遍历这个结构,但我会把研究留给你,作为一个学习经验。我给了你很多关键词来搜索互联网。
}