2009-10-09 93 views
1

我是初学3D图形的东西,学习xna和csharp。xna:在3D对象后面显示2d精灵

我有3D对象,我想绘制在2D背景前, 3D对象很简单,它只是一条线。我从2维VertexPositionColor []中做出来的。

然后我用PrimitiveType.LineStrip绘制它。

我也有一个Texture2D,我用Spritebatch.draw显示。

发生了什么事情是线显示在背景的后面,所以我不能看到任何线。

但如果我评论了spritebatch.draw,我可以看到那里的线。

请帮忙..

回答

2

你有一个z缓冲区的问题。你以什么顺序进行2D和3D绘图? 2D应该先来我猜。另外,混合SpriteBatch和3D操作时,您应该检查出how to make render states work

+0

我也这么认为。当我申请的代码,仍然没有影响任何东西 – r4ccoon 2009-10-11 12:11:41

1

我设法解决它。所有的3D绘制方法都应该在spritebatch.begin和end之后。

我所做的就是把effect.begin和pass.begin的spritebatch.begin后,结束

这里有上game1.cs绘制方法的代码(默认文件名当您使用向导)

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); 
    } 
+1

所以你基本上是说我的回答是正确的..? ;) – 2009-10-12 08:04:07

+0

是的,这是正确的。大声笑。但是在代码发生一些变化之后,我必须再次应用(取消resetRenderState3D的注释)重置渲染状态。 很奇怪..但它的工作。 – r4ccoon 2009-10-13 01:08:50

+0

好。是的,很奇怪。也许让sprite批处理保存渲染状态将会与重置渲染状态具有相同的效果...... – 2009-10-14 06:52:10