2012-03-31 8 views
0

私はボクセルベースのゲームエンジンに取り組んでいます。そこにはチャンクが必要です。私はminecraftからChunkクラスを読み込もうとしましたが、理解できません。 チャンクの意味:16x16x256ブロックの配列3D世界でチャンクを作成する方法は?

私の質問はチャンクの仕組みとデータの保存方法です。チャンクによって

+0

ここで誰もがMinecraftのコードベースに読み込まれているわけではありませんが、チャンクはメモリバッファから幾何学的な構造から完全に異なるものまであります。あなたが参照しているチャンクは何ですか?あなたは何をしようとしているのですか。これまでに何を試しましたか?あなたの非稼動コードを見せてもらえますか? – datenwolf

+0

私は働いていないコードを持っていません、私はそれをどうすればいいのか分からないのです。 – TheMorfeus

+0

@datenwolfチャンクは一般的にボクセルのグラフィックスに関連しています。私はただのミニクラフト特有のものではないと信じています。 –

答えて

1

私は意味:その後、いくつかの幾何学的構造を覆すブロックの16x16x256配列

まあが、。これがマイクロフト風のゲームであれば、ブロックは塗りつぶされているか、空白です。それらのブロックが異なるタイプであること、または単に「そこにある」または「存在しない」ことを望みますか?

簡単にするために、1つのブロックに対して2^CHAR_BITの状態が必要です(ほとんどのシステムでは、CHAR_BITは8です)。状態0はvoidを意味します。したがって、ブロックを構造体の配列に格納することができます

char chunk[16][16][256]; 

これをクラスにカプセル化することができます。もちろん

class Chunk 
{ 
private: 
    char chunk[16][16][256]; 
} 

あなたの世界が複数のチャンクで構成され、あなたはおそらく、各グリッドセルは、1つのチャンク

class ChunkGrid 
{ 
private: 
    std::list<Chunk> chunks; 

そして、あなたもよろしい用を占めるグリッド、であなたのチャンクを手配しますあなたはすぐにインデックスチャンクが世界で自分の位置に依存することができるように、空間的な細分化構造でこれらのチャンクを整理するために、オクトツリーは、あなたがALSよその

class ChunkOctree 
    { 
    private: 
     union Fork 
     { 
      ChunkOctree *branch; 
      Chunk *leaf; 
     }; 
     Fork forking[2][2][2]; 
    } 

のために素晴らしい作品oいくつかの関数がこの構造を横断するようにしたいが、私は学習実験としてあなたに研究を任せておく。私はあなたのためのinterwebsを検索するためのキーワードをたくさん与えてきました。

} 
+0

素晴らしいですが、それはJavaですか? – TheMorfeus

+0

すでにどこかのC++チュートリアルがあります。それはなぜ私がJavaタグの下で質問をしていたのです。 – TheMorfeus

+1

@ TheMorfeus:この擬似コードを考えてみましょう。概念的には、C++、Java、Dの間に違いはありません。学習者としては、使用する言語を超えて、基本的な概念やデータ構造を理解していることが重要です。 – datenwolf

関連する問題