2011-09-26 13 views
30

È possibile eseguire il rendering su texture utilizzando SpriteBatch in libGdx (motore Java per Android/Desktop)? Se è così, come si fa?libgdx SpriteBatch renderizza texture

In pratica, voglio eseguire il rendering di tutto in un'area di 320 x 240 con trama 512 x 256 e dell'area di ridimensionamento per adattarlo allo schermo (in modalità orizzontale). In questo modo voglio eliminare gli artefatti che accadono quando scala in scala le trame alfa in modo indipendente. Se esiste un altro modo per rimuovere tali artefatti, si prega di indicarli :)

E c'è qualche documentazione online per libGdx?

+0

Sono interessato a una funzione del genere. Dopo aver gettato uno sguardo al codice "SpriteBatch", tuttavia, non ritengo che sarebbe banale implementare una funzione del genere - e che ciò implicherebbe la ricompilazione della libreria. Ho aggiunto alcune funzioni a "Pixmap" (sul lato nativo) in passato, ma questo sembra più ingombrante. – huff

risposta

59

Questo snippet mi è stato fornito sul forum LibGDX e funziona in modo impeccabile.

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

Grande, grazie !! – huff

+6

Il punto di utilizzo di TextureRegion avvolto attorno al frame buffer per mantenere la texture capovolta è ben apprezzato qui. I nuovi arrivati ​​prendono nota. –

+0

Sto avendo alcuni problemi di applicazione del presente: http://i.gyazo.com/7329707597bf94974dfd76fc1f33285d.gif Se disegno la mia SpriteBatch, tutto sembra bene, ma quando cerco di catturare le cose in un FBO, ho problemi con l'FBO che disegna tutte le cose che sono state precedentemente renderizzate. Qualche idea? – Daryl

3

Per il momento, ti consiglio di utilizzare Pixmap s. Vedete, non ci sono molte funzioni scritte per loro, ma a quanto pare è possibile scrivere un Pixmap (con canale alfa) su un altro (pm1.drawPixmap(pm2, srcx, srcy, w, h, ...)), a condizione che non si voglia ridimensionarlo (è possibile ridimensionare la composizione in un secondo momento, ma la proporzione delle immagini utilizzate nella composizione non verrà ridimensionata ... a meno che non si scriva una funzione di ridimensionamento).

Se si vuole fare cose più complesse (come scrivere una stringa utilizzando un BitmapFont in un Texture per la manipolazione successiva, o la scrittura in una Pixmap e poi caricarlo nella memoria video), poi ... poi dimmi se ci riesci (come voglio andare in quella direzione per ottimizzare). Penso che la cosa migliore sarebbe quella di aggiungere le funzioni necessarie per libgdx ...

In ogni caso, non prendere nulla che ho scritto qui come verità- innegabile se ottengo ulteriormente, vi aggiornerò.

La documentazione che ho trovato è un po 'limitata -Sono sicuro che l'hai già fatto. Ci sono informazioni nel blog di Badlogic e nella pagina del progetto googlecode, e c'è anche un libro relativamente buono scritto da Mario, "Inizio giochi Android". Inoltre, ci sono alcuni video (molto semplici). E non dimenticare che puoi consultare fonte e gli splendidi esempi ...

Inoltre, si può sempre chiedere nel forum: http://badlogicgames.com/forum/

UPDATE: La tua risposta utilizzando il FrameBuffer e TextureRegion è innegabilmente molto meglio. Lascio questo solo perché menziona la documentazione.

Problemi correlati