2012-09-16 113 views
2

我需要在OpenGL中渲染背景圖像,我試圖獲得與Photoshop中的「顏色減淡」相同的結果,但我無法做到。OpenGL中的顏色閃避

現在我做:

glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE); 

// background 
glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, background); 
glBegin(GL_TRIANGLE_STRIP); 
glTexCoord2f(0.0, 0.0); 
... 
glEnd(); 
glDisable(GL_TEXTURE_2D); 

// image 
glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, image); 
glBegin(GL_TRIANGLE_STRIP); 
glTexCoord2f(0.0, 0.0); 
... 
glEnd(); 
glDisable(GL_TEXTURE_2D); 

背景是沒有alpha通道的TGA。圖像是帶alpha通道的tga。

這會渲染帶背景上的alpha圖像,但太亮。

我讀,因爲它應該是一樣容易:

glBlendFunc(GL_ONE, GL_ONE); 

但是,儘管有alpha通道的圖像被呈現爲白色正方形。

顯然我做錯了什麼。

回答

3

你不能使用混合來獲得相當於Photoshop的「顏色減淡」效果。這是一個比使用標準混合邏輯可以表達的更復雜的數學函數。所以你將不得不提出一些程序化的混合方法來使其工作。

+0

我假設有可能開箱即用。現在看來,與背景紋理的混合沒有發生,而是與背景顏色(白色)相反。 –

0

有一種方法可以在GL混合功能中進行顏色閃避。這就像混合模式的Photoshop版本,但只有它比Photoshop的「顏色道奇」更暗。你必須使用這種類型的功能:

glBlendFunc(GL_DST_COLOR, GL_ONE);