繁体   English   中英

点精灵Alpha混合

[英]Point Sprite Alpha Blending

我正在开发适用于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);

已经处理了预乘图像。 除此之外,我在片段着色器中有一些代码将图像转换为灰度,然后将灰度转换为透明度,并且我的颜色乘法是错误的。

最终,我保留了原来的混合功能不变(如上所述)。 它可以正常工作,这是我一直在寻找的结果:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM