2010-02-16 94 views
5

我不確定是否有這個名稱,但基本上我需要做的是取兩個不透明的子畫面,以50%的不透明度繪製它們以及它們重疊的位置,它看起來更黑暗。渲染重疊半透明物體而沒有變暗重疊

Example Image http://i45.tinypic.com/n35281.gif

左邊的圖像是它是如何最初呈現。然後,我想減少渲染的alpha,並且默認情況下,我在中間獲取圖像,但是我想要將圖像放在右側。

我在iPhone上使用cocos2d,現在我使用阿特拉斯精靈管理器渲染精靈,它沒有自己的阿爾法,所以我試圖通過減少每個阿爾法來減少阿爾法。 sprite,並且還會減少源圖像的alpha,這兩者我都沒有預料到會發揮作用。

是否有一些混合模式可以啓用,或者一些(快速)將完全不透明的圖像渲染到輔助緩衝區,然後在將緩衝區與主緩衝區混合之前減少不透明度?

回答

3

AFAIK沒有簡單的方法。替代方案我能想到的是: -

  1. 修改幾何圖形使對象不重疊(最難編碼,但性能最高)。
  2. 將對象渲染爲完全不透明的紋理,然後渲染該alpha混合。
  3. 使用模板緩衝區(如果iPhone支持我猜測它沒有的模板緩衝區)。從模板設置爲零開始,將其設置爲在繪製半透明多邊形時寫入1,並將條件設置爲僅在緩衝區爲0時繪製片段。
+0

2號正是我想到的這樣做。那會特別慢嗎? – 2010-02-16 17:46:43

+0

它基本上是UIKit在將UIView的不透明度設置爲小於1.0時所做的 - 視圖以其整個位圖的形式呈現,然後將其合成到屏幕。這意味着您正在爲您的形狀進行任何渲染,併爲離屏位圖的每個像素進行2次讀取和1次寫入。我認爲只要你沒有爲每個「精靈」做所有事情,並且你沒有複製任何比你在混合操作中需要的像素更好的東西,那就可以。 – U62 2010-02-16 18:08:10