Сильный разрыв при быстром перемещении камеры - PullRequest
1 голос
/ 05 октября 2011

Я создаю клон Minecraft, и всякий раз, когда я перемещаю камеру даже немного быстро, между кусками появляется большая разрыв, как показано здесь:

http://imgur.com/oTtN2

Каждый кусок имеет размер 32x32x32 куба и имеет один буфер вершин для каждого типа куба, на случай, если это имеет значение. Я также рисую 2D текст на экране, и я узнал, что мне нужно было установить состояние графического устройства для каждого вида рисунка. Вот как я рисую кубики:

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

Мир выглядит хорошо, если я стою на месте. Я думал, что это может быть потому, что я нахожусь в оконном режиме, но когда я переключил полноэкранный режим, проблема не исчезла. Я также предполагаю, что XNA сама по себе является двойным буфером Или так Google сказал мне.

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

У меня была похожая проблема - я обнаружил, что мне нужно вызвать pass.Apply () после установки всех параметров эффекта ...

0 голосов
/ 17 февраля 2012

Исправлено до сих пор использование одного гигантского буфера вершин. Мне это не нравится, но это все, что работает.

...