【发布时间】:2014-06-02 21:28:04
【问题描述】:
所以我正在尝试制作自定义按钮,为此我需要组合按钮背景的不同部分。为此,我认为使用 FrameBuffer 会起作用,但是它没有给出可行的结果。因此,我尝试通过编写一个简单的测试方法来测试我的 FrameBuffer 绘制方法,该方法返回在每次 render() 调用时绘制到显示器的纹理。这个方法放在这里(注意是测试方法,所以可能优化的有点差):
private Texture test()
{
BitmapFont f = ReverseBlade.fontTitle;
f.setColor(Color.LIGHT_GRAY);
FrameBuffer fbo = new FrameBuffer(Format.RGBA8888, (int)f.getBounds("Hi").width, (int)f.getBounds("Hi").height, false);
Batch b = ReverseBlade.batch;
OrthographicCamera c = new OrthographicCamera(fbo.getWidth(), fbo.getHeight());
c.setToOrtho(false);
c.update();
b.setProjectionMatrix(c.combined);
fbo.begin();
b.begin();
f.draw(b, "Hi", 0, 0);
b.end();
fbo.end();
Texture t = fbo.getColorBufferTexture();
fbo.dispose();
b.setProjectionMatrix(ReverseBlade.camera.combined);
return t;
}
但是,没有显示任何内容。屏幕很暗……我试过不带相机和其他多种我不记得的变体。我做错了什么?
半解 我最终要做的是为 FrameBuffer 创建一个新的 Matrix4 对象,如下所示:
Matrix4 m = new Matrix4();
m.setToOrtho2D(0, 0, fbo.getWidth(), fbo.getHeight());
batch.setProjectionMatrix(m);
但是,这会使绘制的所有内容都颠倒过来,如下所示:
【问题讨论】:
-
test()纹理是在哪里绘制的? -
@noone 给显示,在类的draw(Batch b, float parentAlpha)方法中;这是一个演员。
-
@noone 我更新了我的问题,如果你想检查一下:3
标签: java opengl libgdx framebuffer