gpt4 book ai didi

LibGDX 帧缓冲

转载 作者:行者123 更新时间:2023-12-04 13:27:06 24 4
gpt4 key购买 nike

我正在尝试制作一个游戏,你可以用零件 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com