1

这是我创建的第一个 3D 应用程序,如果这看起来像一个简单的问题,我很抱歉,但我已经搜索了互联网和这些论坛,试图找到答案。

我正在尝试使用 spriteBatch.DrawString 命令在屏幕上绘制一个简单的字符串。

该应用程序类似于 Minecraft,屏幕上有大量立方体。为了解决滞后问题,所有立方体都是通过顶点创建的,并且已经实现了硬件实例化。

问题是当我调用 spriteBatch.Begin() 时,所有其他多维数据集看起来都不同。我知道 spritebatch 更改了某些状态,因此添加了以下行

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

Bellow 是用来绘制玩家的代码

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

我想发布问题的屏幕截图以更清楚地显示它,但由于这是我的第一篇文章,我无权发布图像。我很高兴将图像通过电子邮件发送给人们。

我很乐意提供任何其他信息,但这似乎是一个简单的问题。

感谢您提供的任何帮助。

山姆维克里

4

1 回答 1

0

我可以看到您在哪里设置顶点缓冲区,但看不到您在任何地方设置索引缓冲区?

它通常就在您设置顶点缓冲区的位置附近。像这样的东西:'

device.SetVertexBuffer(myVertexBuffer);
device.Indices = myIndexBuffer;
于 2013-02-27T14:49:48.507 回答