LibGDX 帧缓冲

标签 libgdx

我正在尝试制作一个游戏,你可以用零件 build 一艘宇宙飞船,然后让它四处飞行等等。
我想从一系列组件(例如从 TextureAtlas 中)创建这艘船。我想从它的组件纹理中绘制船,然后将绘制的船保存为一个大纹理。 (所以我不必绘制 50 个组件纹理,只需绘制一个船舶纹理。解决此问题的最佳方法是什么?
我一直在尝试使用 FrameBuffer 这样做。我已经能够将组件绘制到纹理,并将纹理绘制到屏幕,但无论我尝试什么,纹理最终都会得到一个帧缓冲区大小的纯色背景。这就像 clear 命令无法清除透明一样。这是我目前的绘图代码。这艘船只是一个 Sprite ,我将 FrameBuffer 纹理保存到它。

public void render(){

    if (ship == null){
        int screenwidth = Gdx.graphics.getWidth();
        int screenheight = Gdx.graphics.getHeight();

        SpriteBatch fb = new SpriteBatch();

        FrameBuffer fbo = new FrameBuffer(Format.RGB888, screenwidth, screenheight, false);

        fbo.begin();

        fb.enableBlending();
        Gdx.gl.glBlendFuncSeparate(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA, GL20.GL_ONE, GL20.GL_ONE_MINUS_SRC_ALPHA);

        Gdx.gl.glClearColor(1, 0, 1, 0);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        fb.begin();

        atlas.createSprite("0").draw(fb);

        fb.end();

        fbo.end();

        ship = new Sprite(fbo.getColorBufferTexture());
        ship.setPosition(0, -screenheight);
    }

    Gdx.gl.glClearColor(1, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    batch.begin();

    batch.enableBlending();
    batch.setBlendFunction(GL20.GL_ONE, GL20.GL_ZERO);
    ship.draw(batch);
    batch.end();
}

最佳答案

这里的问题在于这一行:

 FrameBuffer fbo = new FrameBuffer(Format.RGB888, screenwidth, screenheight, false);

特别是 Format.RGB888 .这一行是说你的 FrameBuffer 应该是 红色 (8 位)后跟 绿色 (8 位)后跟 蓝色 (8 位)。但是请注意,这种格式没有 的任何位。阿尔法 (透明度)。为了从帧缓冲区中获得透明度,您可能想要使用 Format.RGBA8888 ,其中包括额外的 8 位 Alpha。

希望这可以帮助。

关于LibGDX 帧缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24434236/

相关文章:

java - LibGDX:如何实现 Google Play 游戏服务?

intellij-idea - 启动配置无法识别不在 jar 中的 Assets 文件夹/ Assets

java - Libgdx 和 Android NFC

java - libGDX foreach 创建对象吗?

java - libGDX 纹理打包器 runnable-texturepacker.jar 无法打开

java - Libgdx 和 ProGuard 无法与 Themable Widget Library(桌面)一起使用

Libgdx Actions => 逐渐将 Actor 从 A 点移动到 B 点

java - Bx2D body Sprite 同步

java - 触及项目结构,现在项目找不到任何包

java - 渲染到一半大小的帧缓冲区,然后将其放大以实现像素化外观