2013-02-06 122 views
2

我在libgdx中使用FrameBuffer類獲得以下奇怪結果。libgdx中幀緩衝區模糊結果

enter image description here

這裏是產生這一結果的代碼:

// 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×72)相同。

+0

+1表示您的問題的註釋圖片。尼斯。 –

回答

3

爲了解決這個,幀緩衝器必須具有的寬度和高度等於該級的,是這樣的:

fbo = new FrameBuffer(Pixmap.Format.RGBA8888, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false); 
6

你SpriteBatch正在使用錯誤的投影矩陣。既然你正在渲染一個自定義大小的FrameBuffer,你將不得不手動設置一個FrameBuffer。

projectionMatrix = new Matrix4(); 
projectionMatrix.setToOrtho2D(0, 0, heart.getRegionWidth(), heart.getRegionHeight()); 
batch.setProjectionMatrix(projectionMatrix); 
+0

這是正確的答案,其他只是一種解決方法。在很多情況下,你會想要使用一個尺寸與屏幕不匹配的FB。 –