L'abattage des techniques pour un rendu beaucoup de cubes

Je suis en train de travailler sur un projet d'apprentissage pour faire un Minecraft clone. Il fonctionne très bien à part une chose. Similaire à Minecraft, mon terrain a beaucoup de cubes empilés sur l'axe de sorte que vous pouvez creuser. Bien que je ne frustum culling, cela signifie que je ne pas en tirer toutes les couches de cubes en dessous de moi. Les cubes sont X, Y et Z commandé (bien que dans 1 sens, si ce n'est pas techniquement Z a ordonné à la caméra). J'ai essentiellement à partir de la position du joueur seulement ajouter des pointeurs sur des cubes autour du joueur. Ensuite, je ne frustum culling contre ces. Je ne fais pas oct arbre de la subdivision. J'ai pensé tout simplement pas rendu les couches en dessous du lecteur, à l'exception de ce qui ne fonctionne pas si le joueur regarde vers le bas dans un trou. Compte tenu de cela, comment pourrais-je éviter de rendu des cubes en dessous de moi que je ne peux pas le voir, ou aussi les cubes qui sont cachés par d'autres cubes.

Grâce

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

            }
        }

}
  • Au moins, lorsque vous effectuez le rendu de tri d'avant en arrière, de sorte que vous rejetez tous les bas cubes rapidement. Mais un oct-arbre sera une bonne idée.
  • Comment puis-je rendre à partir de l'avant vers l'arrière si mon angle est comme, 65 degrés sur x, 70 on y, dans ce cas, comment pourrais-je le faire sans faire une distance de vérifier à partir de la caméra du joueur?
  • Le clonage d'un clone. Je suis très heureux que j'ai décidé de ne pas essayer de faire mon propre.
  • La première utilisation d'un octree de minimiser le nombre de cubes que vous allez tirer. Puis trier par le carré de la distance. ("L'Occlusion de requête" est une chose que vous voudrez peut-être regarder ainsi.)
InformationsquelleAutor jmasterx | 2010-09-12