2012-03-31 88 views
0

我正在基于体素的游戏引擎,其中我需要有块。我曾尝试从Minecraft中读取一个Chunk类,但我无法理解它。 大块我的意思是:16x16x256块的阵列如何在3D世界中创建块?

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

+0

并不是所有人都已经读入了Minecraft的代码库,一块可能是从一块内存缓冲区到几何结构到完全不同的任何东西。你指的是什么块?你想做什么。你到目前为止尝试了什么?你能告诉我们你的非工作代码吗? – datenwolf 2012-03-31 11:58:04

+0

我没有非工作代码,因为我甚至不知道我该怎么做。 – TheMorfeus 2012-03-31 12:01:46

+0

@datenwolf一个块与体素图形有关,一般我相信不只是我的世界特定 – 2012-03-31 12:02:44

回答

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]; 
    } 

你会阿尔斯o想要一些功能来遍历这个结构,但我将把研究留给你,作为一个学习的经验。我给了你大量的关键词来搜索互联网。

} 
+0

太棒了,但是,甚至是Java? – TheMorfeus 2012-03-31 12:18:38

+0

那里已经有一个C++的教程。这就是为什么我问java标签下的问题。 – TheMorfeus 2012-03-31 12:32:31

+1

@TheMorfeus:考虑这个伪代码。从概念上讲,C++,Java或D在这些方面没有区别。作为一名学习者,对于您来说很重要的是,您正在超越所使用的语言,理解底层的概念和数据结构。 – datenwolf 2012-03-31 12:35:00