0

std::vector<Chunk*> m_vpChunksチャンクのベクトルを保持するオブジェクトがあります。また、私は世界と X、Y、Z 座標を持っています。

私はチャンクを作成します:

// Go through all chunks
    for(int x = 0; x < m_iSize; x+=CHUNK_SIZE_X)
    {
        for(int y = 0; y < m_iSize; y+=CHUNK_SIZE_Y)
        {
            for(int z = 0; z < m_iSize; z+=CHUNK_SIZE_Z)
            {


                // Create new chunk
                CChunk  *pChunk =   NULL;
                pChunk          =   new CChunk(CVector3(x,y,z));
                assert(pChunk);       


                // Add it to our list
                m_vpChunks.push_back(pChunk);

            }
        }
    }

そして、次のような X、Y、Z でチャンク ベクトルにインデックスを付けたい:

CChunk *GetChunk(int X, int Y, int Z)
{

 return m_vpChunks[ *** ];

}

何か案は?

4

1 に答える 1

2

私はそれだと思います

return m_vpChunks[
  x/CHUNK_SIZE_X * (m_iSize/CHUNK_SIZE_Y * m_iSize/CHUNK_SIZE_Z) +
  y/CHUNK_SIZE_Y * (m_iSize/CHUNK_SIZE_Z) +
  z/CHUNK_SIZE_Z ];


しかし、真剣に、別のデータ構造を使用してください。ネストされたベクトルが思い浮かびます。その場合、次のように返されます。

return m_vpChunks[x][y][z];

または多分

return m_vpChunks[x/CHUNK_SIZE_X][y/CHUNK_SIZE_Y][z/CHUNK_SIZE_Z];
于 2012-07-13T17:31:36.827 に答える