我清除帧缓冲......
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
...我启用了这样的混合......
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
[self render]
glDisable(GL_BLEND);
在该渲染代码中,我只需添加一个四边形并绘制它。在我的片段着色器中,我有......
gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
这产生了清晰的四边形。大。没有颜色,没有阿尔法,没有任何东西......得到它。但是,我将片段着色器更改为...
gl_FragColor = vec4(1.0, 0.0, 0.0, 0.0);
我得到了四边形的白色。有人可以向我解释如何用完全透明的红色填充四边形会产生不透明的白色,而不仅仅是清晰的吗?
答案 0 :(得分:0)
没有GL_ONE_MINUS_SRC_ALPHA执行
(1, 1, 1, 1) - (As/kA, As/kA, As/kA, As/kA)
所以如果As为0则会产生(1,1,1,1)?
虽然我不清楚为什么当你从(0,0,0,0)将片段设置为(1,0,0,0)时,为什么会有不同的效果。我注意到我用了glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
你对混合函数的不同参数有什么用?