Domanda

Bene, sto creando una cosa del terreno minecraft solo per il gusto di farlo. Il problema che ho è che se si guarda su un certo angolo di alcune facce che sono in realtà dietro gli altri sono disegnate di fronte a loro, quindi non mostrando quelle reali che ci sono. Come minecraft Ho il terreno separato in regioni, e quando il VertexBuffer è costruito, vengono mostrate solo le facce "esterne". È anche per qualche motivo non è disegno del blocchetto sinistro cima né. In aggiunta a tutti questi problemi facce sembrano essere sovrapposti cioè (solo la metà di un volto può essere visto)

Ecco come si presenta (nota io sono solo disegno le facce superiori perché devo fissare gli altri verso l'alto): http://s1100.photobucket.com/albums/g420/darestium/?action=view¤t=minecraftliketerrain.png

Sono anche disegnando tutte le regioni in una sola volta con il seguente metodo (sto usando il file effetto di Reimer fino a quando posso scrivere il mio:):

public void Draw(Player player, World world) 
    { 
        effect.CurrentTechnique = effect.Techniques["TexturedNoShading"]; 
        effect.Parameters["xWorld"].SetValue(Matrix.Identity); 
        effect.Parameters["xProjection"].SetValue(player.Camera.ProjectionMatrix); 
        effect.Parameters["xView"].SetValue(player.Camera.ViewMatrix); 
        effect.Parameters["xCamPos"].SetValue(player.Camera.Position); 
        effect.Parameters["xTexture"].SetValue(world.TextureAlias.SheetTexture); 
        effect.Parameters["xCamUp"].SetValue(player.Camera.UpDownRotation); 

        for (int x = 0; x < world.regions.GetLength(0); x++) 
        { 
            for (int y = 0; y < world.regions.GetLength(1); y++) 
            { 
                foreach (EffectPass pass in effect.CurrentTechnique.Passes) 
                { 
                    pass.Apply(); 


                    Region region = world.regions[x, y]; 

                    if (player.Camera.BoundingFrustum.Contains(region.BoundingBox) != ContainmentType.Disjoint) 
                    { 
                        device.SetVertexBuffer(region.SolidVertexBuffer); 
                        //device.Indices = region.SolidIndices; 
                        device.DrawPrimitives(PrimitiveType.TriangleList, 0, region.VertexCount); 
                        //device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, region.VertexCount, 0, region.SolidIndices.IndexCount / 3); 
                    } 
                } 
            } 
        } 
    } 

Aiuto sarebbe molto apprezzato grazie:)

È stato utile?

Soluzione

appare come la Z-buffer è disabilitato. Prova impostazione:

GraphicsDevice.DepthStencilState = DepthStencilState.Default;

Il problema con esso non disegnare i primi blocchi / sinistra, che si parla, è probabilmente un problema a che fare con il codice di generazione vertex buffer (in tal caso, provate a chiedere un'altra domanda specifica su questo tema).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top