Сильный разрыв при быстром перемещении камеры
Я создаю клон Minecraft, и всякий раз, когда я перемещаю камеру даже немного быстро, между кусками, как показано здесь:
Каждый кусок имеет размер 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 ответа
До сих пор было исправлено использование одного гигантского буфера вершин. Мне это не нравится, но это все, что работает.
У меня была похожая проблема - я обнаружил, что должен был вызвать pass.Apply() после установки всех параметров эффекта...