0

私はボクセルベースのゲームエンジンに取り組んでおり、チャンクが必要です。Minecraftからチャンククラスを読み込もうとしましたが、理解できません。チャンクとは、16x16x256ブロックの配列を意味します

だから私の質問は:チャンクはどのように機能し、どのようにデータを保存するのですか?

4

1 に答える 1

1

チャンクとは、16x16x256ブロックの配列を意味します

さて、それはいくつかの幾何学的構造に逆らいます。これがMicraft風のゲームである場合、ブロックは埋められるか、無効になります。それらのブロックを異なるタイプにしますか、それとも単に「ある」または「ない」にしますか。

簡単にするために、ブロックに対して2 ^ CHAR_BITの異なる状態を設定したいとします(ほとんどのシステムではCHAR_BITは8です)。状態0は無効を意味します。したがって、これらのブロックを構造体の配列に格納できます

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

これをクラスにカプセル化できます。

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

もちろん、あなたの世界は複数のチャンクで構成されています。おそらく、各グリッドセルが1つのチャンクを占めるグリッドにチャンクを配置します。

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

そして確かに、これらのチャンクを空間的な細分化構造に編成して、世界での位置に応じてチャンクにすばやくインデックスを付けることができるようにする必要があります。Octreeはそのために素晴らしい働きをします。

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

また、いくつかの関数でこの構造をトラバースする必要がありますが、学習体験として、調査はあなたに任せます。インターウェブを検索するためのキーワードをたくさん用意しました。

}
于 2012-03-31T12:15:12.667 に答える