簡體   English   中英

Monogame中Spritebatch的Alpha混合問題

[英]Alpha Blending Problems With Spritebatch in Monogame

我正在使用玩家自己的精靈在他下方的地板上創建動態陰影。

角色的當前動畫幀被垂直翻轉,垂直擠壓,並在​​黑色的下面以部分Alpha透明度繪制。

spriteBatch.Draw (character_sprite[character[c].sprite, 0], r_draw, r_source, Color.Black * .3f, MathHelper.ToRadians (0), v_origin, SpriteEffects.FlipVertically, 0);

這在XNA中看起來很棒,但是在移植到Monogame之后,我得到了一些奇怪的結果。

我的理解是,不透明度級別應在0f到1f的范圍內,但是大多數值似乎會產生純黑色(完全不透明),除非我將其降低到大約0.05f或更低。 此時,我獲得了部分透明性,但是結果看起來是灰色(飽和度較低)而不是黑色(較暗)。 例如,在灰色表面上根本沒有陰影。

幾乎似乎spriteBatch使用的是AdditiveBlend而不是AlphaBlend,但是我絕對將其設置為alpha且僅設置一次:

spriteBatch.Begin (SpriteSortMode.Immediate, BlendState.AlphaBlend);

有趣的是,如果我將顏色設置為Color.White(而不是黑色),則透明度看起來很正常(像反射),沒有扭曲的顏色。

Monogame處理透明度與XNA有所不同嗎?

更新:

我嘗試創建一個通用的黑色橢圓形陰影,並使用Color.White *不透明度對其進行繪制。 這也導致陰影變成灰色(而不是使背景變暗),從而反駁了我先前關於Color.White的理論。 似乎游戲中的所有部分透明性都被當作加法而不是alpha處理。

經過一些試驗,我意識到這僅在角色陰影處發生,而不在任何其他透明精靈處發生。

最終,我將問題縮小到程序中的邏輯錯誤,該錯誤是在每個幀中對character_draw函數進行多次調用。 在該函數中繪制的任何具有alpha透明性的東西都會多次粘貼在其自身上,從而導致異常高的不透明性以及我所看到的明顯的加性(或灰色)效果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM