2D & 3D 同時呈現!!

摘要:2D & 3D 同時呈現!!

嗯  這個問題不知道大家有沒有遇過...

2D跟3D同時在一個程式呈現的時候,如果用預設的設定會發生,模型都變成透明的了!!!

我被這個問題困擾很久了...

想過BLEND等等的問題,結果都沒成功

這種問題,只要在2D貼圖跟3D貼圖同時進行的時候,都會發生~~~

我也問過同學這種問題他們有沒有碰過跟說在OPENGL情況下,需要更動像是ALPHA BLEND

不過經過我測試過後來是沒辦法...

這兩天在網路上找到一個文章

作者有提到如果2D跟3D要一起用的話的呈現方式

(老實說,2D跟3D一起用這個簡直就是家常便飯~~~如RPG的血量表、ITEM等等)

那我們應該要在哪邊動刀?

嘿嘿~~~答案就是,2D的繪圖前製動作
spriteBatch.Begin();
上面這一行,這個關鍵的函數

他有以下多載~~
SpriteBatch.Begin ()
SpriteBatch.Begin (SpriteBlendMode)
SpriteBatch.Begin (SpriteBlendMode, SpriteSortMode, SaveStateMode)
SpriteBatch.Begin (SpriteBlendMode, SpriteSortMode, SaveStateMode, Matrix)

基本上,前兩個多載,在這種問題沒有任何幫助ORZ

所以用3或4就可以,這邊用3就OK~

設定如下
spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Deferred, SaveStateMode.SaveState);
第三個參數,這整個核心的部分,如果這邊設成NONE的話,就會變成原本的問題
他的用意就是,當呼叫到Begin這個2D貼圖的方法時候,他會儲存所有設備的狀態,直到遇到END才恢復。

預覽圖
正確要呈現的
正確圖片

錯誤的呈現
錯誤的呈現

由上面兩張圖片不難看出,差別在哪~~

程式碼 :
XNA2.0
140.126.21.8/~b09402129/XNA/example5.rar