2012-07-31 147 views
1

我正在使用LibGDX绘制一个简单的绘画应用程序,并且无法使用我正在使用的安装程序正确“绘制”。我尝试这样做的方法是使用精灵进行绘制,并在合适时使用LibGDX的FBO命令将这些单个精灵添加到背景纹理中。LibGDX - 使用FBO进行纹理贴图

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

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

基本上,每个精灵的透明区域增亮低于他们什么,我需要让他们完全透明的。我混淆了许多不同的混合模式组合,找不到更好的混合模式组合。例如GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA没有这个问题,但是每个精灵的透明像素似乎在alpha中被降低,甚至从下面的图层中取出一些颜色,这看起来更加恼人。

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

回答

1

你在画什么样的命令? Alpha混合只适用于已经在目标中的像素,因此您必须以Z顺序绘制所有包含alpha的东西(以及“在它们后面”的所有东西)以获得正确的结果。我正在使用.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

+0

这些精灵按照它们放置的顺序被绘制,所以它们总是在它之前添加的任何东西之上。我在原来的帖子中犯了一个小错误,我现在已经修正了这个错误,但是我使用了“GL_ONE,GL_ONE_MINUS_SRC_ALPHA”来获得屏幕截图中显示的效果。使用你建议的相同混合模式,我可以在原始文章中看到我提到的效果,尽管之前它不正确。对不起,可能造成的任何混淆! – Cyanide 2012-07-31 21:57:38