2

我正在开发一个基于 LibGDX 框架的 Android 应用程序(尽管我认为这不会对这个问题产生太大影响),并且在使用透明精灵进行绘制时我很难找到一种方法来获得我想要的结果。问题是精灵在它们重叠的地方明显层叠在一起,类似于此图像中显示的内容:

分层问题

这对于我想做的一些事情来说非常难看,甚至完全破坏了其他部分。我希望他们做的是无缝合并在一起,如下所示:

分层所需的结果

到目前为止,我唯一的成功是将整个精灵序列以完全不透明度绘制在单独的纹理上,然后以所需的不透明度绘制该纹理。我有这个工作得很好,我可以让它在我需要的大部分工作中工作,但现在最大的问题是这些东西是动态绘制到屏幕上的,以及修改一个相当大的纹理的过程和将其发送回去对移动设备来说是相当繁重的,并且会导致无法接受的性能水平。

我花了很多时间寻找更理想的解决方案,包括尝试混合模式并提出古怪的公式,以平衡 alpha 和颜色值的方式平衡事情,但没有什么特别成功。我的猜测是,唯一可行的方法是前面提到的创建纹理并应用 alpha 差异的方法,但我不确定使用低功耗移动设备的最佳方法。

4

1 回答 1

2

可能还有其他一些方法可以做到这一点:最直接的方法是附加一个模板缓冲区并首先在模板上绘制圆圈,然后用模板绘制一个具有所需颜色+alpha的全屏矩形,这应该会快得多一些具有单独纹理的 FBO。

另一件事可能是先用禁用的混合绘制这些圆圈,然后用倒置的“blendFunc”绘制整个场景,但请注意,如果其他元素也需要混合,这可能是不可能的。

第三,您可以使用渲染缓冲区的 alpha 通道,而不是使用模板。只需使用颜色蒙版仅绘制到 alpha 并绘制圆圈,然后在颜色蒙版上重新启用 RGB 并使用适当的“blendFunc”绘制全屏矩形还请注意,如果以前的形状使用了混合,则需要将 alpha 清除为 1.0在执行此操作之前(仅将颜色蒙版设为 Alpha,禁用混合,使用 Alpha 设置为 1.0 的颜色绘制全屏矩形)

于 2013-03-25T11:59:05.867 回答