我想在我的程序中实现以下混合功能,而不使用OpenGL。
glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA);
在OpenGL实时测试应用程序中,我能够在白色背景上混合使用此功能颜色。混合结果应该看起来像http://postimg.org/image/lwr9ossen/。 我有一个白色的背景,想要在它上面混合红点。高密度的红点应该是不透明/黑色。
glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
for(many many many times)
glColor4f(0.75, 0.0, 0.1, 0.85f);
DrawPoint(..)
我尝试了一些东西,但我没有成功。 这个混合函数的等式有没有?
答案 0 :(得分:1)
如果要在自己的代码中实现整个功能,混合功能应直接转换为您需要的操作。
GL_DST_COLOR
对应于目标中的颜色,即输出图像。
'GL_ONE_MINUS_SRC_ALPHA`是1.0减去正在渲染的像素的alpha分量。
将所有这些放在一起,使用(colR, colG, colB, colA)
您正在渲染的像素的颜色,并(imgR, imgG, imgB)
输出图像中像素位置的当前颜色:
GL_DST_COLOR = (imgR, imgG, imgB)
GL_ONE_MINUS_SRC_ALPHA = (1.0 - colA, 1.0 - colA, 1.0 - colA)
GL_DST_COLOR * (colR, colG, colB) + GL_ONE_MINUS_SRC_ALPHA * (imgR, imgG, imgB)
= (imgR, imgG, imgB) * (colR, colG, colB) +
(1.0 - colA, 1.0 - colA, 1.0 - colA) * (imgR, imgG, imgB)
= (imgR * colR + (1.0 - colA) * imgR,
imgG * colG + (1.0 - colA) * imgG,
imgB * colB + (1.0 - colA) * imgB)
这是渲染像素时写入图像的颜色。