Android 点精灵阿尔法混合
我正在为Android开发一款绘画应用程序,它允许用户用手指画画。它是使用OpenGL ES 2.0构建的,使用点精灵技术以及用于快速渲染的FBO。在FBO上正确渲染透明区域的情况下,我遇到了将各个点精灵混合在一起的问题,但当精灵重叠时,我可以看到在上一个精灵上渲染的透明区域。以下是它当前的外观: 这就是这个混合方程式:Android 点精灵阿尔法混合,android,opengl-es,alphablending,point-sprites,Android,Opengl Es,Alphablending,Point Sprites,我正在为Android开发一款绘画应用程序,它允许用户用手指画画。它是使用OpenGL ES 2.0构建的,使用点精灵技术以及用于快速渲染的FBO。在FBO上正确渲染透明区域的情况下,我遇到了将各个点精灵混合在一起的问题,但当精灵重叠时,我可以看到在上一个精灵上渲染的透明区域。以下是它当前的外观: 这就是这个混合方程式: GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA); 如果我将图形颜色更改为白色或黑色,则效果
GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA);
如果我将图形颜色更改为白色或黑色,则效果会非常好:
我也尝试过这个混合功能:
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_DST_ALPHA);
其结果是:
这几乎是完美的,但要改为白色,主色应该变暗。有没有关于正确的混合功能应该是什么来实现这一点的想法
注:
我对混合函数的工作原理有了一个概念,即取源颜色和目标颜色的分数,并在我的例子中将它们加在一起,这样颜色就会变成白色。所以我想知道我想实现的是仅仅用混合函数还是我需要别的什么?如果需要,我可以从片段着色器中提供代码,但对我来说,这看起来不像是片段问题。好的,所以我发现了问题所在。它毕竟不是混合函数,而是片段着色器。。我有一些逻辑来增加像素,作为混合函数是多余的
GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA);
已处理预乘图像。除此之外,我在片段着色器中有一些代码将图像转换为灰度,然后将灰度转换为透明度,而我的颜色乘法是错误的
最后,我将原来的混合函数保持不变(如上所述)。它工作正常,下面是我想要的结果:
好的,所以我找到了问题所在。它毕竟不是混合函数,而是片段着色器。。我有一些逻辑来增加像素,作为混合函数是多余的
GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA);
已处理预乘图像。除此之外,我在片段着色器中有一些代码将图像转换为灰度,然后将灰度转换为透明度,而我的颜色乘法是错误的
最后,我将原来的混合函数保持不变(如上所述)。它工作正常,下面是我想要的结果: