web-dev-qa-db-fra.com

libgdx SpriteBatch rendu à la texture

Est-il possible de rendre à la texture en utilisant SpriteBatch dans libGdx (moteur Java pour Android/Desktop)? Si oui, comment faire?

Fondamentalement, je veux tout rendre dans une région 320 x 240 de texture 512 x 256 et une région d'échelle pour s'adapter à l'écran (en mode paysage). De cette façon, je veux éliminer les artefacts qui se produisent lorsque je redimensionne indépendamment les textures mélangées alpha. S'il existe un autre moyen de supprimer de tels artefacts, veuillez les signaler :)

Et existe-t-il une documentation en ligne pour libGdx?

36
PiotrK

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

Pour le moment, je vous recommande d'utiliser Pixmaps. Vous voyez, il n'y a pas beaucoup de fonctions écrites pour elles, mais apparemment, vous pouvez écrire un Pixmap (avec canal alpha) dans un autre (pm1.drawPixmap(pm2, srcx, srcy, w, h, ...)), à condition que vous ne vouliez pas redimensionnez-la (vous pouvez redimensionner la composition plus tard, mais la proportion des images utilisées dans la composition ne sera pas redimensionnée ... sauf si vous écrivez une fonction de redimensionnement).

Si vous voulez faire des choses plus complexes (comme écrire une chaîne à l'aide d'un BitmapFont dans un Texture pour une manipulation ultérieure, ou l'écrire dans un Pixmap puis la télécharger sur le mémoire vidéo), alors ... alors dites-moi si vous réussissez (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 tout ce que j'ai écrit ici comme une vérité indéniable - si je vais plus loin, je mettrai à jour.

La documentation que j'ai trouvée est quelque peu limitée -Je suis sûr que vous l'avez déjà parcourue. 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". De plus, il y a quelques vidéos (très basiques) Et n'oubliez pas que vous pouvez consulter la source et les beaux exemples ...

En outre, vous pouvez toujours demander dans le forum: http://badlogicgames.com/forum/

[~ # ~] update [~ # ~] : Votre réponse en utilisant FrameBuffer et TextureRegion est indéniablement beaucoup mieux. Je laisse celui-ci juste parce qu'il mentionne la documentation.

3
huff