我正在编写一个应用程序,允许用户在不同的着色器及其组合之间切换。因此,我想多次绘制完全相同的场景。
最后,所有的pass都应该合并成一个输出。结合我想使用 glblendfunc 的所有通行证,但我没有得到我想要的结果。
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//use first shader
draw();
if (secondShaderWished) {
//use second shader
draw()
}
在每个绘图调用中,我绘制一个具有 alpha 值的纹理,例如透明区域。我得到的最终结果是,我主要看到最后一个渲染通道的效果,但在边界(alpha 值略微下降的地方)我确实看到了第一个着色器效果。我确实认为我应该使用第二个 glBlendFunc 来混合两个通道,但我想不出一种不接触任何 alpha 值的方法,这会破坏预期的效果。
我应该怎么办?除了 alphablending 还有什么别的吗?
编辑:我的目标是结合一个或多个传球。我想混合颜色(很可能将它们加在一起),因为每个路径中的颜色是通过以下混合函数跨不同层计算的:glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
编辑: 再次嗨!我正在解决这个问题,但我被卡住了。我不明白如何在任何着色器中正确设置 sampler2d ......我做错了什么?
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, _FBO)
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, _Tex);
glViewport(0, 0, viewportSize.x(), viewportSize.y());
draw();
GLuint texLocation = glGetUniformLocation(_shader->getProgramID(),"pass0");
glUniform1i(texLocation, 0);
glBindTexture(GL_TEXTURE_2D, 0);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);