我正在开发一款适用于 Android 的绘图应用程序,该应用程序允许用户使用手指进行绘图。它是使用 OpenGL ES 2.0 构建的,使用点精灵技术以及用于快速渲染的 FBO。我在将各个点精灵混合在一起时遇到问题,其中透明区域在 FBO 上正确渲染,但是当精灵重叠时,我可以看到透明区域在前一个精灵上渲染。这是它目前的样子:
这是与这个混合方程:
GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA);
如果我将绘图颜色更改为白色或黑色,则效果很好:
我也试过这个混合功能:
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_DST_ALPHA);
结果是:
这几乎是完美的,但主要颜色应该变暗而不是白色。关于正确的混合功能应该是什么来实现这一点的任何想法?
注意: 我知道混合函数是如何工作的,方法是获取源颜色和目标颜色的一部分,在我的例子中将它们加在一起,这样颜色会变成白色是有意义的。所以我想知道我想要实现的目标是否可以仅通过混合功能来完成,还是我需要其他东西?如有必要,我可以提供来自片段着色器的代码,但对我来说这看起来不像是片段问题。