2011-09-26 232 views
30

是否可以使用libGdx中的SpriteBatch(用於Android/Desktop的Java引擎)渲染到紋理?如果是這樣,怎麼辦?libgdx SpriteBatch渲染到紋理

基本上我想渲染一切到512×256紋理的320×240區域,並且比縮放區域適合屏幕(在橫向模式下)。這樣我就可以消除獨立縮放alpha混合紋理時發生的工件。如果還有其他方法可以刪除這些文物,請將它們指出:)

是否有libGdx的在線文檔?

+0

我對這樣的功能感興趣。然而,在對'SpriteBatch'代碼進行了一番審視之後,我並不認爲實現這樣一個功能並不重要,而且還需要重新編譯庫。我在過去添加了一些功能給'Pixmap'(在本地),但這似乎更加困難。 – huff

回答

59

這段代碼是在LibGDX論壇上發給我的,它完美地工作。

private float m_fboScaler = 1.5f; 
private boolean m_fboEnabled = true; 
private FrameBuffer m_fbo = null; 
private TextureRegion m_fboRegion = null; 

public void render(SpriteBatch spriteBatch) 
{ 
    int width = Gdx.graphics.getWidth(); 
    int height = Gdx.graphics.getHeight(); 

    if(m_fboEnabled)  // enable or disable the supersampling 
    {     
     if(m_fbo == null) 
     { 
      // m_fboScaler increase or decrease the antialiasing quality 

      m_fbo = new FrameBuffer(Format.RGB565, (int)(width * m_fboScaler), (int)(height * m_fboScaler), false); 
      m_fboRegion = new TextureRegion(m_fbo.getColorBufferTexture()); 
      m_fboRegion.flip(false, true); 
     } 

     m_fbo.begin(); 
    } 

    // this is the main render function 
    my_render_impl(); 

    if(m_fbo != null) 
    { 
     m_fbo.end(); 

     spriteBatch.begin();   
     spriteBatch.draw(m_fboRegion, 0, 0, width, height);    
     spriteBatch.end(); 
    } 
} 
+3

太好了,謝謝! – huff

+6

爲了保持紋理翻轉,使用包裹在幀緩衝區中的TextureRegion點在這裏很受讚賞。新來者注意。 –

+0

我遇到了一些問題: http://i.gyazo.com/7329707597bf94974dfd76fc1f33285d.gif 如果我繪製我的spriteBatch,一切看起來都很好,但是當我嘗試捕獲FBO中的東西時,我遇到了問題與FBO繪製所有以前渲染的東西。有任何想法嗎? – Daryl

3

目前,我建議您使用Pixmap s。你看,沒有太多的函數爲他們寫,但顯然你可以寫一個Pixmap(帶有alpha通道)到另一個(pm1.drawPixmap(pm2, srcx, srcy, w, h, ...)),假設你不想縮放它(你可以稍後調整構圖,但在構圖中使用的圖片比例不會調整大小......除非您編寫調整大小功能)。

如果你想要做更復雜的東西(比如寫使用BitmapFont一個字符串轉換爲Texture爲以後的操作,或將其寫爲Pixmap,然後將其上傳到視頻內存),然後...然後告訴我如果你成功了(因爲我想進入這個方向進行優化)。我認爲最好是將需要的功能添加到libgdx ...

反正,不帶走任何東西,我寫在這裏作爲一個不可否認的調查真相,如果我得到進一步的,我會更新。

文檔我發現有點有限 - 我確定你已經經歷了它。在badlogic的博客和googlecode項目頁面中有信息 - 還有一本由Mario編寫的「開始Android遊戲」的書。此外,還有一些(非常基本的)視頻。而且不要忘了,你可以參考源和美麗的例子...

此外,您可以隨時在論壇上詢問:http://badlogicgames.com/forum/

UPDATE:使用你的答案FrameBufferTextureRegion無疑是多少更好。我只是因爲它提到了文檔而留下了這個。