Frage

Nun, ich erstelle nur zum Teufel ein Minecraft -Terrain -Ding. Das Problem, das ich habe, ist, dass, wenn Sie einen bestimmten Winkel schauen, einige Gesichter, die tatsächlich hinter anderen sind, vor ihnen gezogen werden und so die tatsächlichen, die dort sind, nicht zeigen. Wie Minecraft lasse ich das Gelände in Regionen aufgeteilt, und wenn der Scheitelpunkt gebaut wird, werden nur die "äußeren" Gesichter gezeigt. Es ist auch aus irgendeinem Grund nicht das Ziehen des Oberteils und der linken Blöcke. Zusätzlich zu all diesen Problemen scheinen Gesichter zu überlappen, den IE (nur die Hälfte eines Gesichts ist zu sehen)

So sieht es aus (beachten Sie, dass ich nur die oberen Gesichter zeichne, weil ich die anderen reparieren muss): http://s1100.photobucket.com/albums/g420/darestium/?action=view ¤t=Minecraftliketerrain.png

Ich zeichne auch alle Regionen auf einmal mit der folgenden Methode (ich verwende Reimers Effektdatei, bis ich meine eigene schreiben kann :):

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

Hilfe wäre sehr geschätzt, danke :)

War es hilfreich?

Lösung

Sieht so aus, als ob der Z-Puffer deaktiviert ist. Versuchen Sie, einzustellen:

GraphicsDevice.DepthStencilState = DepthStencilState.Default;

Das Problem damit ist wahrscheinlich ein Problem mit Ihrem Vertex -Puffer -Generierungscode, das Sie erwähnen (wenn ja, versuchen Sie, eine andere Frage speziell zu diesem Problem zu stellen).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top