2009-10-09 61 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