这是我在片段着色器中渲染画笔的方式:
gl_FragColor.rgb = Color.rgb;
gl_FragColor.a = Texture.a * Color.a;
在(0,0,0,0)纹理上使用此混合功能:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
这是我用glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)将纹理添加到我的白色背景时看到的:
但这就是我在纹理中得到的结果:
有人可以帮助我理解为什么我的纹理会出现这种灰色的笔触吗?因为我需要截取这个纹理的截图,我希望有相同的渲染但没有白色背景。
答案 0 :(得分:0)
您正在进行两个混合操作,一个在着色器中,一个使用glBlendFunc
调用。当直接渲染到屏幕时,它不会再次应用glBlendFunc
,但是,当渲染到纹理时,它会在渲染到纹理时应用,然后在将纹理渲染到屏幕时再次应用。
您有两个选项,1)不要混合您的着色器,2)使用不同的混合功能(我发现glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
可以正常工作)。我发现选项2对我来说效果最好,处理OpenGL混合函数非常令人讨厌。