2012-03-31 90 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