Методы отбраковки для рендеринга большого количества кубов
Я работаю над проектом личного обучения, чтобы сделатьМайнкрафт Клон. Это работает очень хорошо, кроме одной вещи. Как и в 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);
}
}
}
}
}