Técnicas de selección para renderizar muchos cubos

Estoy trabajando en un proyecto de aprendizaje personal para hacer unMinecraft clon. Está funcionando muy bien aparte de una cosa. Al igual que Minecraft, mi terreno tiene muchos cubos apilados en la Y para que puedas cavar. Aunque hago el sacrificio de frustum, esto todavía significa que dibujo inútilmente todas las capas de cubos debajo de mí. Los cubos están ordenados en X, Y y Z (aunque solo en 1 dirección, por lo que técnicamente no está ordenado en Z a la cámara). Básicamente, desde la posición del jugador, solo agrego punteros a los cubos alrededor del jugador. Luego hago el sacrificio contra estos. No hago subdivisión de oct oct. Pensé en simplemente no renderizar las capas debajo del jugador, excepto que esto no funciona si el jugador mira hacia un agujero. Dado esto, ¿cómo podría evitar representar cubos debajo de mí que no puedo ver, o también cubos que están ocultos por otros cubos?

Gracias

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);
                    }
                }

            }
        }

}

Respuestas a la pregunta(8)

Su respuesta a la pregunta