Question

Eh bien, je vais créer une minecraft comme chose de terrain qui - comme minecraft est seperated dans les régions. mon problème est simplement que certains visages ne sont pas visibles, et en haut et en partie droite de 6x6 régions ne sont pas visibles.

Je me demandais si quelqu'un pouvait vérifier mon code pour voir ce que je fais mal, voici la fonction:

    public void BuildFaceVertices(Vector3 pos, BlockFaceDirection blockFaceDirection)
    {
        Vector3 topLeftFront = new Vector3(0f, 1f, 0f) + pos;
        Vector3 bottomLeftFront = new Vector3(0f, 0f, 0f) + pos;
        Vector3 topRightFront = new Vector3(1f, 1f, 0f) + pos;
        Vector3 bottomRightFront = new Vector3(1f, 0f, 0f) + pos;
        Vector3 topLeftBack = new Vector3(0f, 1f, -1f) + pos;
        Vector3 topRightBack = new Vector3(1f, 1f, -1f) + pos;
        Vector3 bottomLeftBack = new Vector3(0f, 0f, -1f) + pos;
        Vector3 bottomRightBack = new Vector3(1f, 0f, -1f) + pos;

        Vector2 topLeft = new Vector2(0.0f, 0.0f);
        Vector2 topRight = new Vector2(1.0f, 0.0f);
        Vector2 bottomLeft = new Vector2(0.0f, 1.0f);
        Vector2 bottomRight = new Vector2(1.0f, 1.0f);

        switch (blockFaceDirection)
        {
            case BlockFaceDirection.ZIncreasing:
                SolidVertices.Add(new VertexPositionTexture(topRightFront, topRight));
                SolidVertices.Add(new VertexPositionTexture(bottomRightFront, bottomRight));
                SolidVertices.Add(new VertexPositionTexture(bottomLeftFront, bottomLeft));
                SolidVertices.Add(new VertexPositionTexture(topRightFront, topRight));
                SolidVertices.Add(new VertexPositionTexture(bottomLeftFront, bottomLeft));
                SolidVertices.Add(new VertexPositionTexture(topLeftFront, topLeft));
                break;
            case BlockFaceDirection.ZDecreasing:
                SolidVertices.Add(new VertexPositionTexture(topRightBack, topLeft));
                SolidVertices.Add(new VertexPositionTexture(topLeftBack, topRight));
                SolidVertices.Add(new VertexPositionTexture(bottomRightBack, bottomLeft));

                SolidVertices.Add(new VertexPositionTexture(topLeftBack, topRight));
                SolidVertices.Add(new VertexPositionTexture(bottomLeftBack, bottomRight));
                SolidVertices.Add(new VertexPositionTexture(bottomRightBack, bottomLeft));              
                break;
            case BlockFaceDirection.YIncreasing:
                SolidVertices.Add(new VertexPositionTexture(topRightBack, topRight));
                SolidVertices.Add(new VertexPositionTexture(topRightFront, bottomRight));
                SolidVertices.Add(new VertexPositionTexture(topLeftFront, bottomLeft));

                SolidVertices.Add(new VertexPositionTexture(topRightBack, topRight));
                SolidVertices.Add(new VertexPositionTexture(topLeftFront, bottomLeft));
                SolidVertices.Add(new VertexPositionTexture(topLeftBack, topLeft));                 
                break;
            case BlockFaceDirection.YDecreasing:
                SolidVertices.Add(new VertexPositionTexture(bottomLeftFront, topLeft));
                SolidVertices.Add(new VertexPositionTexture(bottomRightFront, topRight));
                SolidVertices.Add(new VertexPositionTexture(bottomLeftBack, bottomLeft));

                SolidVertices.Add(new VertexPositionTexture(bottomRightFront, topRight));
                SolidVertices.Add(new VertexPositionTexture(bottomRightBack, bottomRight));
                SolidVertices.Add(new VertexPositionTexture(bottomLeftBack, bottomLeft));
                break;
            case BlockFaceDirection.XIncreasing:
                SolidVertices.Add(new VertexPositionTexture(topRightBack, topRight));
                SolidVertices.Add(new VertexPositionTexture(bottomRightFront, bottomLeft));
                SolidVertices.Add(new VertexPositionTexture(topRightFront, topLeft));
                SolidVertices.Add(new VertexPositionTexture(topRightBack, topRight));
                SolidVertices.Add(new VertexPositionTexture(bottomRightBack, bottomRight));
                SolidVertices.Add(new VertexPositionTexture(bottomRightFront, bottomLeft));
                break;
            case BlockFaceDirection.XDecreasing:
                SolidVertices.Add(new VertexPositionTexture(topLeftBack, topLeft));
                SolidVertices.Add(new VertexPositionTexture(topLeftFront, topRight));
                SolidVertices.Add(new VertexPositionTexture(bottomLeftFront, bottomRight));
                SolidVertices.Add(new VertexPositionTexture(topLeftBack, topLeft));
                SolidVertices.Add(new VertexPositionTexture(bottomLeftFront, bottomRight));
                SolidVertices.Add(new VertexPositionTexture(bottomLeftBack, bottomLeft));
                break;

        }
    }'

Ce code montre: s1100.photobucket.com/albums/g420/darestium/ la première image est des faces qui ne sont pas nul et celui-ci est des côtés des régions qui ne sont pas en cours d'élaboration.

Merci à l'avance, Darestium

Était-ce utile?

La solution

Votre question a à voir avec ce qu'on appelle Backface Abattage. J'ai récemment créé quelque chose de semblable à ce que vous faites et dans les mêmes RAN questions. La solution est simple, mais il peut être difficile selon la façon dont vous construisez vos sommets. La solution: vous devez construire vos indices dans le sens horaire. Cela signifie, si vous regardez le visage du côté que vous voulez le voir à partir, les indices de ce visage doit être dans le sens horaire dans votre tableau. Vous ne semblez pas avoir inclus votre code pour les indices de construction, seuls les sommets, mais je vais faire la suggestion que vous construisez votre sommets dans l'ordre des aiguilles d'une montre, puis simplement énumérer vos indices 0, 1, 2 (etc, dans l'ordre). D'un coup d'oeil rapide sur votre instruction switch, il semble que les sommets de direction « ZIncreasing » sont dans l'ordre des aiguilles d'une montre, mais le « ZDecreasing » va de TopRight à TopLeft à BottomRight. Si vous consultez le « ZDecreasing » visage de l'arrière que j'imagine que vous, alors je pense que cela est l'ordre dans le sens antihoraire, et ne sera pas affiché (ou plutôt la face à l'intérieur de cette partie du cube sera tiré au sort, qui n'est pas visible pour vous).

S'il est difficile de penser dans votre tête, juste faire un petit cube de papier et étiqueter les coins. Lorsque vous créez les sommets, tracer les coins et assurez-vous qu'ils sont dans l'ordre des aiguilles d'une montre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top