Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 点精灵阿尔法混合_Android_Opengl Es_Alphablending_Point Sprites - Fatal编程技术网

Android 点精灵阿尔法混合

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); 如果我将图形颜色更改为白色或黑色,则效果

我正在为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);
其结果是:

这几乎是完美的,但要改为白色,主色应该变暗。有没有关于正确的混合功能应该是什么来实现这一点的想法

注:
我对混合函数的工作原理有了一个概念,即取源颜色和目标颜色的分数,并在我的例子中将它们加在一起,这样颜色就会变成白色。所以我想知道我想实现的是仅仅用混合函数还是我需要别的什么?如果需要,我可以从片段着色器中提供代码,但对我来说,这看起来不像是片段问题。

好的,所以我发现了问题所在。它毕竟不是混合函数,而是片段着色器。。我有一些逻辑来增加像素,作为混合函数是多余的

GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA);
已处理预乘图像。除此之外,我在片段着色器中有一些代码将图像转换为灰度,然后将灰度转换为透明度,而我的颜色乘法是错误的

最后,我将原来的混合函数保持不变(如上所述)。它工作正常,下面是我想要的结果:


好的,所以我找到了问题所在。它毕竟不是混合函数,而是片段着色器。。我有一些逻辑来增加像素,作为混合函数是多余的

GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA);
已处理预乘图像。除此之外,我在片段着色器中有一些代码将图像转换为灰度,然后将灰度转换为透明度,而我的颜色乘法是错误的

最后,我将原来的混合函数保持不变(如上所述)。它工作正常,下面是我想要的结果: