为什么在 Visual Studio XNA 中实现文本会对 3D 模型产生不利影响?

Why does implementing text have adverse impact on 3D models in Visual Studio XNA?

当我尝试向我的 MonoGame 程序中添加文本时,我遇到了一个问题。它停止正确渲染 3D 对象,切割一些正面,而不是完全显示其他人。

我也尝试过在绘制模型后结束批次,效果相同

public override void Draw(GameTime gameTime)
    {
        spriteBatch.Begin();
        string output = "Score";

        spriteBatch.DrawString(spriteFont, output, Vector2.Zero, Color.LightGreen,
            0, Vector2.Zero, 1.0f, SpriteEffects.None, 0.5f);

        spriteBatch.End();
        foreach (BasicModel model in models)
        {
            model.Draw(((Game1)Game).GraphicsDevice, ((Game1)Game).mainCamera);
        }
        base.Draw(gameTime);
    }

为什么我的文本实现搞砸了我的 3D 模型?

SpriteBatch.Begin() 以最适合 2d 渲染但不适合 3d 渲染的方式更改某些图形管道渲染状态。

因此在渲染 2d 之后,您需要为 3d 渲染重置这些状态。

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

现在您的 3d 可以正常绘制了。 See this link for more info.

spriteBatch.End()foreach()

之间添加这两行