LibGDX - 使用FBO精灵纹理

时间:2012-07-31 03:12:57

标签: opengl-es libgdx framebuffer blending fbo

我正在使用LibGDX制作一个简单的绘画应用程序,我无法使用我正在使用的设置“正确”绘制它。我试图这样做的方法是使用精灵绘制,并在适当的时候使用LibGDX的FBO命令将这些单独的精灵添加到背景纹理中。

我遇到的问题是与混合有关的问题,因为当精灵被添加到我正在构建的纹理中时,精灵的任何透明像素都会被照亮,这些像素位于之前绘制的像素之上大幅上升,显然看起来不太好。以下是结果的样子,使用带有绿色>红色渐变的圆作为“画笔”。现在,顶行是背景纹理的一部分,而底部的行仍然是纯粹的精灵绘制形式。

http://i238.photobucket.com/albums/ff307/Muriako/hmm.png

基本上,每个精灵的透明区域都会照亮它们下方的任何物体,我需要让它们完全透明。我已经弄乱了许多不同的混合模式组合,找不到更好的一个。例如GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA没有这个问题,但是相反,每个精灵的透明像素似乎都降低了alpha,甚至从下面的层中获取了一些颜色,这看起来更令人讨厌。

我很乐意根据请求发布任何代码片段,但是自从我开始尝试修复这些问题后,我的代码变得有点混乱,所以我宁愿只根据需要提供必要的代码。

1 个答案:

答案 0 :(得分:1)

你画精灵的顺序是什么? Alpha混合仅适用于目标中已有的像素,因此您必须按Z顺序绘制所有包含alpha的内容(以及它们后面的所有内容)以获得正确的结果。我正在使用.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);