我在XNA中以正確的順序繪製3D模型時遇到了問題。在XNA中繪製3D模型的順序
下面是描述該問題的兩個圖像:
PIC1:http://imgur.com/wGPIk&L5AY1l PIC2:http://imgur.com/wGPIkl&L5AY1
球向下,一旦它相交的地形移動,透視正在發生變化,使它看起來就好像球在地形後面一樣。
如果我改變描繪順序,它看起來像球是在地形上所有的時間的頂部..
可有人請解釋如何解決這個問題?
在此先感謝
我在XNA中以正確的順序繪製3D模型時遇到了問題。在XNA中繪製3D模型的順序
下面是描述該問題的兩個圖像:
PIC1:http://imgur.com/wGPIk&L5AY1l PIC2:http://imgur.com/wGPIkl&L5AY1
球向下,一旦它相交的地形移動,透視正在發生變化,使它看起來就好像球在地形後面一樣。
如果我改變描繪順序,它看起來像球是在地形上所有的時間的頂部..
可有人請解釋如何解決這個問題?
在此先感謝
的問題是SpriteBatch調用,吸引你的FPS計數器在角落裏。
SpriteBatch更改圖形設備的狀態。每當完成繪製2D對象(在這種情況下,您的幀速率計數器位於左上角)時,您需要恢復設備狀態。
調用SpriteBatch.End()
後,添加以下代碼:
device.DepthStencilState = DepthStencilState.Default;
其中device
是當前GraphicsDevice
你與繪製的參考。
這看起來像一個ZBuffer問題。你有沒有檢查你的Zbuffer已啓用並正在運行?試試David Lively所說的話。如果可行,請檢查您是否在SpriteBatch
類的Begin和End調用中繪製了3D模型。 Begin
準備繪製2D對象的設備,如果您現在嘗試調用3D繪圖,則無法工作。 End確保爲2D設置的所有內容都未設置,並恢復到Begin調用之前的狀態。
當我最初遇到這個問題時,我認爲它也是一個z緩衝區問題。 (從技術上講,這是)。 +1,但SpriteBatch不會恢復整個圖形狀態。其中的一種權力與方便的妥協。 –
完全沒有把戲:)非常感謝你! – dsk
@dsk我花了幾天時間找回相同的問題。你能接受我的回答嗎?我喜歡積分! –
我不得不等待4分鐘才能接受;) – dsk