SpriteBatch с DrawIndexedPrimitives

Это мое первое 3D-приложение, которое я создал, поэтому извините, если это кажется таким простым вопросом, но я искал в Интернете и на этих форумах, чтобы попытаться найти ответ.

Я пытаюсь нарисовать на экране простую строку с помощью команды spriteBatch.DrawString.

Приложение похоже на Minecraft с большим количеством кубиков на экране. Чтобы решить проблемы с задержкой, все кубы создаются через вершины, и был реализован аппаратный экземпляр.

Проблема в том, что когда я вызываю spriteBatch.Begin(), все остальные кубы выглядят по-разному. Я знаю, что spritebatch изменяет некоторые состояния, поэтому были добавлены следующие строки

GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.DepthStencilState = DepthStencilState.Default;

Ниже приведен код, используемый для рисования игрока.

public void Draw(Matrix view, Matrix projection)
    {
        effect.CurrentTechnique = effect.Techniques["TexturedNoShading"];
        effect.Parameters["xView"].SetValue(view);
        effect.Parameters["xProjection"].SetValue(projection);
        effect.Parameters["xWorld"].SetValue(world);
        effect.Parameters["xTexture"].SetValue(texture);

        device.SetVertexBuffer(myVertexBuffer);
        foreach (EffectPass pass in effect.CurrentTechnique.Passes)
        {
            pass.Apply();
            device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, vertices.Length, 0, indices.Length / 3);
        }
    }

Это код, используемый в основном классе для рисования всего

        RasterizerState rs = new RasterizerState();  
        rs.CullMode = CullMode.None;
        rs.FillMode = FillMode.Solid;
        device.RasterizerState = rs;

        GraphicsDevice.BlendState = BlendState.Opaque;
        GraphicsDevice.DepthStencilState = DepthStencilState.Default;
        _map.Draw(_camera.GetCamera(), projection);
        _player.Draw(_camera.GetCamera(), projection);


        spriteBatch.Begin();
        spriteBatch.DrawString(Text, "test", new Vector2(100, 100), Color.White);
        spriteBatch.End();

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

Я рад включить любую другую информацию, но это кажется такой простой проблемой.

Спасибо за любую помощь, которую вы можете оказать.

Сэм Викери


person user1668662    schedule 27.02.2013    source источник


Ответы (1)


Я вижу, где вы устанавливаете свой буфер вершин, но не вижу, где вы устанавливаете индексный буфер?

обычно это будет прямо там, где вы устанавливаете свой вершинный буфер. что-то вроде этого:'

device.SetVertexBuffer(myVertexBuffer);
device.Indices = myIndexBuffer;
person Stig-Rune Skansgård    schedule 27.02.2013
comment
Да, я установил данные методом, который точно такой же, как у вас. - person user1668662; 27.02.2013
comment
Вызывается в методе LoadContent - person user1668662; 27.02.2013
comment
Извините, я неправильно понял, что вы сказали, и вы были правы. Я не менял индексный буфер. Большое спасибо за помощь, это сводило меня с ума :) - person user1668662; 28.02.2013
comment
Нет проблем, вспомнить все, что вам нужно сделать перед вызовом отрисовки, — это то, с чем каждый борется в начале :) Я делаю это каждый раз, когда прошло некоторое время с тех пор, как я программировал что-либо, связанное с играми :P - person Stig-Rune Skansgård; 28.02.2013