2012-05-23 70 views
2

我正在重新創建一些Photoshop混合,我嘗試使用線性光模式。在Photoshop中,您將擁有100%不透明度的背景圖層,然後是設置爲線性光線作爲混合模式的50%不透明頂層。線性光模式的Alpha混合層

我確實找到了關於如何進行線性光線混合的信息,但它只適用於兩個圖層均處於100%不透明狀態時。

這裏是着色器代碼,將做到線性光模式,它提供了相同的結果,如Photoshop圖層時都在100%不透明度:

#define BlendLinearDodgef   BlendAddf 
#define BlendLinearBurnf   BlendSubstractf 

#define BlendAddf(base, blend)  min(base + blend, 1.0) 
#define BlendSubstractf(base, blend) max(base + blend - 1.0, 0.0) 


#define BlendLinearLightf(base, blend) (blend < 0.5 ? BlendLinearBurnf(base, (2.0 * blend)) : BlendLinearDodgef(base, (2.0 * (blend - 0.5)))) 

我看了http://en.wikipedia.org/wiki/Alpha_compositing但我仍然有問題。

如何讓混合模式適用於半透明層?

+0

您能否更新以下問題:1)Linear Light混合的公式是什麼? 2)你期待什麼結果? 3)在這種情況下你沒有得到你所期望的(即定義'不起作用')? 4)你的OpenGL代碼? – Tim

+0

代碼片段應該回答你所有的問題。對於那些沒有Photoshop的人來說,截圖真的有幫助嗎? – Dex

+0

我認爲這是一個OpenGL的問題,我沒有看到任何OGL代碼。我以爲你試圖模仿某種類型的Photoshop功能,但也許我誤解了你。 – Tim

回答

4

您應該閱讀PDF spec以瞭解如何使用混合模式,當您的alpha爲100%以外時。具體請參見第7.2節「基本合成計算」。第414頁上的公式應該解釋您需要什麼:

Cr= (1-as/ar) * Cb + (as/ar) * [(1-ab) * Cs + ab * B(Cb,Cs)]