摘要: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