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

DotBlogs Tags: XNA
posted on 2008/12/5 21:20 | 我要推薦 | 閱讀數 : 1650 | 分類[ XNA ] 訂閱

Comments on this post

# re: 2D & 3D 同時呈現!!

恩 2D为了绘制到最上面 会关闭深度缓冲
Left by Wu on 二月 11, 2009 2:06 上午
回覆

# re: 2D & 3D 同時呈現!!

不好意思,因為載點掛了,可以跟你索程式碼嗎?
e-mail:abcd4567891230@yahoo.com.tw

感恩
Left by 丸子明 on 八月 01, 2009 2:42 下午
回覆

# re: 2D & 3D 同時呈現!!

補充一下,如果SaveStateMode使用SaveState,在BasicEffect中,模型Alpha值會變得調整也看不出效果,一定要將SaveStateMode設定成None才看的道,不知道有沒有辦法解決使用SaveState的同時可以使用BasicEffect模型Alpha值...
Left by Aegis on 九月 08, 2009 11:46 下午
回覆

回應:

Please add 6 and 2 and type the answer here: