我正在基於體素的遊戲引擎,其中我需要有塊。我曾嘗試從Minecraft中讀取一個Chunk類,但我無法理解它。 大塊我的意思是:16x16x256塊的陣列如何在3D世界中創建塊?
所以我的問題是:如何塊工作,以及它如何存儲數據?
我正在基於體素的遊戲引擎,其中我需要有塊。我曾嘗試從Minecraft中讀取一個Chunk類,但我無法理解它。 大塊我的意思是:16x16x256塊的陣列如何在3D世界中創建塊?
所以我的問題是:如何塊工作,以及它如何存儲數據?
通過塊我的意思是: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想要一些功能來遍歷這個結構,但我將把研究留給你,作爲一個學習的經驗。我給了你大量的關鍵詞來搜索互聯網。
}
太棒了,但是,甚至是Java? – TheMorfeus 2012-03-31 12:18:38
那裏已經有一個C++的教程。這就是爲什麼我問java標籤下的問題。 – TheMorfeus 2012-03-31 12:32:31
@TheMorfeus:考慮這個僞代碼。從概念上講,C++,Java或D在這些方面沒有區別。作爲一名學習者,對於您來說很重要的是,您正在超越所使用的語言,理解底層的概念和數據結構。 – datenwolf 2012-03-31 12:35:00
並不是所有人都已經讀入了Minecraft的代碼庫,一塊可能是從一塊內存緩衝區到幾何結構到完全不同的任何東西。你指的是什麼塊?你想做什麼。你到目前爲止嘗試了什麼?你能告訴我們你的非工作代碼嗎? – datenwolf 2012-03-31 11:58:04
我沒有非工作代碼,因爲我甚至不知道我該怎麼做。 – TheMorfeus 2012-03-31 12:01:46
@datenwolf一個塊與體素圖形有關,一般我相信不只是我的世界特定 – 2012-03-31 12:02:44