3

这里有一些简单的背景知识,我刚开始使用 LibGDX 框架进行 Android 游戏开发的第一次尝试。我正在尝试通过放置精灵来使用他们的 FrameBuffer 类构建纹理,并且我想将此纹理用作一种逐级动态/随机背景。

不幸的是,当精灵被添加到 FrameBuffer 时,它们似乎会完全覆盖它们下面的任何东西。一般来说这很好,但是我将使用的许多精灵都有半透明像素,并且因为这些透明像素会覆盖它们下面的任何实心像素,它会显示为基本背景颜色并产生非常不愉快的效果.

换句话说,从多个精灵中创建一个实体纹理并将它们层叠在一起而不完全移除较低像素(至少如果顶部像素是半透明的)的最佳方法是什么?

在这方面进行了几个小时的试验和搜索,我不知所措。谢谢你的时间!

- - - 编辑 - - -

这是用于将精灵添加到 FBO 的代码。它非常缺乏,因为目前我只是在随机位置添加一个精灵以进行测试。我很乐意根据要求发布任何代码,但是现在整个设置都非常简约,可以解决这个问题。

    m_fbo.begin();
    batch.begin();
    batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
    sprite.draw(batch);
    batch.end();
    m_fbo.end();
4

1 回答 1

0

老问题,但是你能粘贴FBO初始化代码吗?您需要在 FBO 中有一个 Alpha 通道。另一件事是 FBO 是 GLES 2.0 的特性,因此您可能想要使用自己的着色器,因为必须在 GLES 2.0 上手动完成 alpha 测试。

最后,您是否启用了批次混合?

批处理.enableBlending();

应该做的伎俩。

于 2013-03-12T10:53:53.903 回答