Методы отбраковки для рендеринга большого количества кубов

Я работаю над проектом личного обучения, чтобы сделатьМайнкрафт Клон. Это работает очень хорошо, кроме одной вещи. Как и в Minecraft, в моей местности много кубов, сложенных на Y, так что вы можете копать. Хотя я делаю отбраковку фрустума, это все равно означает, что я бесполезно рисую все слои кубов под собой. Кубы упорядочены по X, Y и Z (хотя только в 1 направлении, поэтому технически Z не упорядочено по камере). Я в основном с позиции игрока только добавляю указатели на кубики вокруг игрока. Затем я делаю отбраковку фрустума против них. Я не делаю окт дерево подразделение. Я думал просто не рендерить слои под игроком, за исключением того, что это не работает, если игрок смотрит вниз в отверстие. Учитывая это, как я могу избежать рендеринга кубов подо мной, которые я не вижу, или кубов, которые скрыты другими кубами.

Спасибо

void CCubeGame::SetPlayerPosition()
{
PlayerPosition.x = Camera.x / 3;
PlayerPosition.y = ((Camera.y - 2.9) / 3) - 1;
PlayerPosition.z = Camera.z / 3;
}

void CCubeGame::SetCollids()
{

SetPlayerPosition();

int xamount = 70;
int zamount = 70;
int yamount = 17;

int xamountd = xamount * 2;
int zamountd = zamount * 2;
int yamountd = yamount * 2;
PlayerPosition.x -= xamount;

PlayerPosition.y -= yamount;

PlayerPosition.z -= zamount;


collids.clear();
CBox* tmp;

    for(int i = 0; i < xamountd; ++i)
    {
        for(int j = yamountd; j > 0; --j)
        {
            for(int k = zamountd; k > 0; --k)
            {

                tmp = GetCube(PlayerPosition.x + i, PlayerPosition.y + j, PlayerPosition.z + k);



                if(tmp != 0)
                {
                    if(frustum.sphereInFrustum(tmp->center,25) != NULL)
                    {
                        collids.push_back(tmp);
                    }
                }

            }
        }

}

Ответы на вопрос(8)

Ваш ответ на вопрос