C# xna:在三维对象后面显示二维精灵

C# xna:在三维对象后面显示二维精灵,c#,xna,sprite,C#,Xna,Sprite,我是3d图形的初学者,学习xna和csharp 我想在2d背景前绘制3d对象, 3d对象很简单,它只是一条线。我是用二维VertextionColor[]制作的 然后我用PrimitiveType.LineStrip画了它 还有一个纹理2D,我用Spritebatch.draw显示 正在发生的是,这条线显示在背景的后面,所以我看不到任何线 但是如果我对spritebatch.draw进行了注释,我可以看到那里的线条 请帮助..您遇到了z缓冲区问题。您按什么顺序绘制二维和三维图形?我想2D应该排在

我是3d图形的初学者,学习xna和csharp

我想在2d背景前绘制3d对象, 3d对象很简单,它只是一条线。我是用二维VertextionColor[]制作的

然后我用PrimitiveType.LineStrip画了它

还有一个纹理2D,我用Spritebatch.draw显示

正在发生的是,这条线显示在背景的后面,所以我看不到任何线

但是如果我对spritebatch.draw进行了注释,我可以看到那里的线条


请帮助..

您遇到了z缓冲区问题。您按什么顺序绘制二维和三维图形?我想2D应该排在第一位。另外,在混合SpriteBatch和3D操作时,您应该检查一下。我设法解决了这个问题。 所有3D绘制方法应在spritebatch.begin和end之后

我所做的是在spritebatch之后添加效果。开始和通过。开始和结束

以下是game1.cs(使用向导时的默认文件名)上绘制方法的代码


我也这么想。当我应用代码时,它仍然没有影响任何东西,所以你基本上是说我的答案是正确的……;)是的,没错。lol。但是在代码中做了一些更改之后,我不得不再次应用(取消对resetRenderState3D的注释)重置渲染状态。奇怪的但是它起作用了,很好。是的,很奇怪。也许让精灵批量保存渲染状态与重置渲染状态具有相同的效果……正如文章所说,保存渲染状态会减慢游戏的速度。即使没有它,我的游戏已经很慢了。我想我必须在这里和那里耍点小把戏。
    protected override void Draw(GameTime gameTime)
    {
        graphics.GraphicsDevice.Clear(Color.Black);

        spriteBatch.Begin();             
        GameEngine.Draw(GameEngine,gameTime); 
        spriteBatch.End();

        //resetRenderState3D();
        GameEngine.Draw3D(GameEngine, gameTime);

        base.Draw(gameTime); 
    }