2010-03-21 131 views
2

嘿,我試圖畫一個常量的顏色到framebuffer,並使用RGBA紋理中的alpha通道進行混合。我一直在看glBlendFunc和glBlendColor,但似乎無法找出一種方法來忽略紋理中的RGB值。我想我必須自己提取alpha值,並使用GL_ALPHA創建第二個紋理。有一個更好的方法嗎?在OpenGL中只使用alpha通道紋理?

謝謝!

+0

最好的答案很簡單:使用着色器。在GLSL代碼中,您可以使用任何您可以想象的方式使用紋理數據。 – Kos 2011-02-12 16:47:06

回答

0

當使用glBlendFunc,GL_SRC_ALPHAGL_DST_ALPHA可以用來選擇在你的紋理α通道(其選擇取決於你的混合操作和紋理)。如需更詳細的教程混合看到:

相關的OpenGL文檔:

+0

glBlendFunc可以讓你選擇不同的alpha值,以及如何與它們混合,但據我所知,所有這些都會影響你的_scale和combine_的源和目標顏色。我試圖忽略源顏色,並使用RGBA紋理中的alpha值混合不同的顏色。 – Chris 2010-03-21 06:14:53

+0

這聽起來像你想掩蓋?請參閱教程#3鏈接,瞭解「圖片上的蒙版」部分。這是你想要做的嗎? – Clinton 2010-03-21 09:46:55

+0

教程#3鏈接已死亡。 – sharvey 2010-11-14 21:57:33

1

我使用顏色編碼採摘。這是我使用這樣的代碼紋理四的那透明區域不會被選擇的是:我說我想要的RGB是不管它是應用紋理之前

glEnable(GL_COLOR_MATERIAL); 
glEnable(GL_TEXTURE_2D); 
glEnable(GL_ALPHA_TEST); 

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); 
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); 
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_TEXTURE); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); 

glAlphaFunc(GL_GREATER, 0.5f); 

glColor3ub(myColor[0], myColor[1], myColor[2]); 

drawTexturedQuad(); 

本質(這將是myColor),我希望ALPHA可以從紋理中獲取。

+0

嘿,這個工程! – 2013-02-26 22:28:53

相關問題