我正在进行一个个人学习项目,制作一个Minecraft克隆版。这个项目很好地运作着,除了一个问题。与Minecraft类似,我的地形由许多沿Y轴堆叠的立方体所组成,因此您可以挖掘下去。尽管我进行了截锥体剔除,但这仍意味着我无用地绘制了所有在我下面的立方体层。这些立方体是按X、Y和Z排序的(尽管只有在一个方向上,因此它在技术上不被相机排序为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);
}
}
}
}
}