【问题标题】:LibGDX - Sprites to texture using FBOLibGDX - 使用 FBO 的 Sprites 纹理
【发布时间】:2012-07-28 18:35:25
【问题描述】:

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

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

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

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

我很乐意根据要求发布任何代码 sn-ps,但自从我开始尝试解决这些问题以来,我的代码变得有些混乱,所以我宁愿只在必要时发布必要的部分。

【问题讨论】:

    标签: opengl-es libgdx framebuffer blending fbo


    【解决方案1】:

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

    【讨论】:

    • 精灵的绘制顺序与它们被放置的顺序相同,因此它们始终位于之前添加的所有精灵之上。我在原来的帖子中犯了一个小错误,现在我已经修复了,但我使用“GL_ONE,GL_ONE_MINUS_SRC_ALPHA”来获得屏幕截图中显示的效果。使用您建议的相同混合模式,我得到了我在原始帖子中提到的效果,尽管之前它是不正确的。对于可能造成的任何混乱,我们深表歉意!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    相关资源
    最近更新 更多