2011-09-28 37 views
3

我在XNA中以正確的順序繪製3D模型時遇到了問題。在XNA中繪製3D模型的順序

下面是描述該問題的兩個圖像:

PIC1:http://imgur.com/wGPIk&L5AY1l PIC2:http://imgur.com/wGPIkl&L5AY1

球向下,一旦它相交的地形移動,透視正在發生變化,使它看起來就好像球在地形後面一樣。

如果我改變描繪順序,它看起來像球是在地形上所有的時間的頂部..

可有人請解釋如何解決這個問題?

在此先感謝

回答

10

的問題是SpriteBatch調用,吸引你的FPS計數器在角落裏。

SpriteBatch更改圖形設備的狀態。每當完成繪製2D對象(在這種情況下,您的幀速率計數器位於左上角)時,您需要恢復設備狀態。

調用SpriteBatch.End()後,添加以下代碼:

device.DepthStencilState = DepthStencilState.Default; 

其中device是當前GraphicsDevice你與繪製的參考。

+1

完全沒有把戲:)非常感謝你! – dsk

+0

@dsk我花了幾天時間找回相同的問題。你能接受我的回答嗎?我喜歡積分! –

+0

我不得不等待4分鐘才能接受;) – dsk

1

這看起來像一個ZBuffer問題。你有沒有檢查你的Zbuffer已啓用並正在運行?試試David Lively所說的話。如果可行,請檢查您是否在SpriteBatch類的Begin和End調用中繪製了3D模型。 Begin準備繪製2D對象的設備,如果您現在嘗試調用3D繪圖,則無法工作。 End確保爲2D設置的所有內容都未設置,並恢復到Begin調用之前的狀態。

+0

當我最初遇到這個問題時,我認爲它也是一個z緩衝區問題。 (從技術上講,這是)。 +1,但SpriteBatch不會恢復整個圖形狀態。其中的一種權力與方便的妥協。 –