36 votes

libgdx SpriteBatch rendu à la texture

Est-il possible d'effectuer un rendu en texture en utilisant SpriteBatch dans libGdx (moteur Java pour Android/Desktop) ? Si oui, comment faire ?

En fait, je veux tout rendre dans une région de 320 x 240 d'une texture de 512 x 256, puis adapter la région à l'écran (en mode paysage). De cette façon, je veux éliminer les artefacts qui se produisent lorsque je mets à l'échelle des textures mélangées alpha indépendamment. S'il existe un autre moyen d'éliminer ces artefacts, merci de le signaler :)

Existe-t-il une documentation en ligne pour libGdx ?

64voto

PiotrK Points 990

Cet extrait m'a été donné sur le forum LibGDX et il fonctionne parfaitement.

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();
    }   
}

3voto

huff Points 603

Pour l'instant, je vous recommande d'utiliser Pixmap s. Vous voyez, il n'y a pas beaucoup de fonctions écrites pour eux, mais apparemment vous pouvez écrire un Pixmap (avec canal alpha) à un autre ( pm1.drawPixmap(pm2, srcx, srcy, w, h, ...) ), à condition que vous ne vouliez pas la mettre à l'échelle (vous pouvez mettre la composition à l'échelle plus tard, mais la proportion des images utilisées dans la composition ne sera pas redimensionnée... à moins que vous n'écriviez une fonction de redimensionnement).

Si vous voulez faire des choses plus complexes (comme écrire une chaîne de caractères à l'aide d'une fonction BitmapFont en un Texture pour une manipulation ultérieure, ou l'écrire dans un Pixmap puis en le téléchargeant sur la mémoire vidéo), puis... puis dis-moi si tu réussis (car je veux aller dans cette direction pour optimiser). Je pense que le mieux serait d'ajouter les fonctions nécessaires à libgdx ...

Quoi qu'il en soit, ne prenez pas ce que j'ai écrit ici comme une vérité indéniable - si j'avance, je mettrai à jour.

Le site documentation J'ai trouvé que les possibilités sont quelque peu limitées - je suis sûr que vous les avez déjà parcourues. Il y a des informations dans le blog de badlogic et dans la page du projet googlecode - et il y a aussi un livre relativement bon écrit par Mario, "Beginning Android Games". Il existe également quelques vidéos (très basiques). Et n'oubliez pas que vous pouvez consulter les sources et les beaux exemples...

En outre, vous pouvez toujours poser des questions dans le forum : http://badlogicgames.com/forum/

UPDATE : Votre réponse en utilisant le FrameBuffer et TextureRegion est indéniablement bien meilleur. Je laisse celui-ci juste parce qu'il mentionne la documentation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X