嘿,我試圖畫一個常量的顏色到framebuffer,並使用RGBA紋理中的alpha通道進行混合。我一直在看glBlendFunc和glBlendColor,但似乎無法找出一種方法來忽略紋理中的RGB值。我想我必須自己提取alpha值,並使用GL_ALPHA創建第二個紋理。有一個更好的方法嗎?在OpenGL中只使用alpha通道紋理?
謝謝!
嘿,我試圖畫一個常量的顏色到framebuffer,並使用RGBA紋理中的alpha通道進行混合。我一直在看glBlendFunc和glBlendColor,但似乎無法找出一種方法來忽略紋理中的RGB值。我想我必須自己提取alpha值,並使用GL_ALPHA創建第二個紋理。有一個更好的方法嗎?在OpenGL中只使用alpha通道紋理?
謝謝!
當使用glBlendFunc,GL_SRC_ALPHA
和GL_DST_ALPHA
可以用來選擇在你的紋理α通道(其選擇取決於你的混合操作和紋理)。如需更詳細的教程混合看到:
相關的OpenGL文檔:
我使用顏色編碼採摘。這是我使用這樣的代碼紋理四的那透明區域不會被選擇的是:我說我想要的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可以從紋理中獲取。
嘿,這個工程! – 2013-02-26 22:28:53
最好的答案很簡單:使用着色器。在GLSL代碼中,您可以使用任何您可以想象的方式使用紋理數據。 – Kos 2011-02-12 16:47:06