libgdx SpriteBatch渲染到纹理

时间:2011-09-26 07:09:08

标签: android opengl-es libgdx

是否可以在libGdx(Android / Desktop的Java引擎)中使用SpriteBatch渲染到纹理?如果是这样,怎么办?

基本上我想将所有内容渲染到512 x 256纹理的320 x 240区域,而不是缩放区域以适合屏幕(在横向模式下)。这样我想消除当我独立缩放alpha混合纹理时发生的伪像。如果有任何其他方法可以删除此类工件,请指出它们:)

还有libGdx的在线文档吗?

2 个答案:

答案 0 :(得分:62)

这个片段是在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();
    }   
}

答案 1 :(得分:3)

目前,我建议您使用Pixmap s。你知道,为它们编写的函数并不多,但显然你可以将Pixmap(带有alpha通道)写入另一个(pm1.drawPixmap(pm2, srcx, srcy, w, h, ...)),前提是你不想缩放它(您可以稍后缩放合成,但合成中使用的图片比例不会调整大小...除非您编写调整大小功能。)

如果你想做更复杂的事情(比如使用BitmapFont将字符串写入Texture以供稍后操作,或者将其写入Pixmap然后将其上传到视频内存),然后......然后告诉我你是否成功(因为我想进入那个方向进行优化)。我认为最好的方法是将所需的功能添加到 libgdx ...

无论如何,不​​要把我在这里写的任何东西视为不可否认的事实 - 如果我进一步了解,我会更新。

我发现文档有点受限 - 我相信你已经完成了它。 badlogic的博客和googlecode项目页面中有信息 - 还有一本相对好的书,由Mario撰写,“Beginning Android Games”。此外,还有一些(非常基本的)视频。不要忘记你可以咨询来源和美丽的例子......

此外,您可以随时在论坛中提问:http://badlogicgames.com/forum/

更新:使用FrameBufferTextureRegion的答案无疑更好。我离开这个只是因为它提到了文档。