Я работаю над личным учебным проектом, чтобы сделать Minecraft клон. Он отлично работает в стороне от одной вещи. Подобно Minecraft, у моей местности много кубов, уложенных на Y, чтобы вы могли выкапывать. Несмотря на то, что я делаю отсев, это все равно означает, что я бесполезно рисую все слои кубов ниже меня. Кубы X, Y и Z упорядочены (хотя и только в 1 направлении, поэтому его технически Z не заказывал камеру). Я в основном из позиции игрока добавляю только указатели на кубы вокруг игрока. Затем я делаю отговорку против них. Я не занимаюсь подразделением oct tree. Я думал просто не показывать слои ниже игрока, за исключением того, что это не работает, если игрок смотрит вниз в отверстие. Учитывая это, как я мог избежать отображения кубов ниже меня, которые я не вижу, или кубов, которые скрыты другими кубами.
Спасибо
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);
}
}
}
}
}