Question

I am creating a minecraft clone, and whenever I move the camera even a little bit fast there is a big tear between the chunks as shown here:

http://imgur.com/oTtN2

Each chunk is 32x32x32 cubes and has a single vertex buffer for each kind of cube, in case it matters. I am drawing 2D text on the screen as well, and I learned that I had to set the graphic device state for each kind of drawing. Here is how I'm drawing the cubes:

GraphicsDevice.Clear(Color.LightSkyBlue);

#region 3D
// Set the device
device.BlendState = BlendState.Opaque;
device.DepthStencilState = DepthStencilState.Default;
device.RasterizerState = RasterizerState.CullCounterClockwise;

// Go through each shader and draw the cubes of that style
lock (GeneratedChunks)
{
    foreach (KeyValuePair<CubeType, BasicEffect> KVP in CubeType_Effect)
    {
        // Iterate through each technique in this effect
        foreach (EffectPass pass in KVP.Value.CurrentTechnique.Passes)
        {
            // Go through each chunk in our chunk map, and pluck out the cubetype we care about
            foreach (Vector3 ChunkKey in GeneratedChunks)
            {
                if (ChunkMap[ChunkKey].CubeType_TriangleCounts[KVP.Key] > 0)
                {
                    pass.Apply(); // assign it to the video card
                    KVP.Value.View = camera.ViewMatrix;
                    KVP.Value.Projection = camera.ProjectionMatrix;
                    KVP.Value.World = worldMatrix;

                    device.SetVertexBuffer(ChunkMap[ChunkKey].CubeType_VertexBuffers[KVP.Key]);
                    device.DrawPrimitives(PrimitiveType.TriangleList, 0, ChunkMap[ChunkKey].CubeType_TriangleCounts[KVP.Key]);
                }
            }
        }
    }
}
#endregion

The world looks fine if I'm standing still. I thought this might be because I'm in windowed mode, but when I toggled full screen the problem persisted. I also assume that XNA is double buffered by itself? Or so google has told me.

Was it helpful?

Solution 2

The fix so far has been to use 1 giant vertex buffer. I don't like it, but that's all that seems to work.

OTHER TIPS

I had a similar issue - I found that I had to call pass.Apply() after setting all of the Effect's parameters...

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top