2

libgdx のFrameBufferクラスで次の奇妙な結果が得られます。

ここに画像の説明を入力

この結果を生成しているコードは次のとおりです。

// This is the rendering code
@Override
public void render(float delta) {
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

    stage.act();
    stage.draw();

    fbo.begin();
    batch.begin();
    batch.draw(heart, 0, 0);
    batch.end();
    fbo.end();  

    test = new Image(fbo.getColorBufferTexture());
    test.setPosition(256, 256);
    stage.addActor(test);
}

//This is the initialization code
@Override
public void show() {
    stage = new Stage(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false);
    atlas = Assets.getAtlas();
    batch = new SpriteBatch();

    background = new Image(atlas.findRegion("background"));     
    background.setFillParent(true); 
    heart = atlas.findRegion("fluttering");
    fbo = new FrameBuffer(Pixmap.Format.RGBA8888, heart.getRegionWidth(), heart.getRegionHeight(), false);

    stage.addActor(background);
    Image temp = new Image(new TextureRegion(heart));
    stage.addActor(temp);
}

フレーム バッファの幅と高さが画像 (71 x 72) と同じであるにもかかわらず、フレーム バッファに描いたハートが反転して元のものよりも小さくなるのはなぜですか。

4

2 に答える 2

6

SpriteBatch が間違った射影行列を使用しています。カスタム サイズの FrameBuffer にレンダリングしているため、手動で設定する必要があります。

projectionMatrix = new Matrix4();
projectionMatrix.setToOrtho2D(0, 0, heart.getRegionWidth(), heart.getRegionHeight());
batch.setProjectionMatrix(projectionMatrix);
于 2013-06-01T23:52:08.650 に答える
3

これを解決するには、次のように、フレームバッファの幅と高さがステージと同じである必要があります。

fbo = new FrameBuffer(Pixmap.Format.RGBA8888, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false);
于 2013-02-06T14:56:11.187 に答える