gpt4 book ai didi

android - 在 OpenGL ES 中无缝分层透明 Sprite

转载 作者:行者123 更新时间:2023-11-29 00:31:16 33 4
gpt4 key购买 nike

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

Layering problem

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

Layering desired result

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

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

最佳答案

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

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

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

关于android - 在 OpenGL ES 中无缝分层透明 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15594596/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com