libgdx 在运行时生成纹理
libgdx generate texture at runtime
您好,我需要创建一个由其他纹理叠加而成的纹理。我试过使用 pixmap,但速度很慢。这个想法是创建一个对话框的“快照”,以便它可以在显示和关闭时进行动画处理。请帮助
这是我正在使用的代码:
texture_dialog.getTextureData().prepare();
Pixmap pm1 = texture_dialog.getTextureData().consumePixmap();
btn_ok.getTexture().getTextureData().prepare();
Pixmap pm = btn_ok.getTexture().getTextureData().consumePixmap();
pm1.drawPixmap(pm, pm1.getWidth()/2 - pm.getWidth()/2, pm1.getHeight() - pm.getHeight() - 52);
textureSnapShot = new Texture(pm1, true);
pm1.dispose();
pm.dispose();
textureSnapShot.setFilter(TextureFilter.MipMapLinearLinear, TextureFilter.MipMapLinearLinear);
spriteSnapShot = new Sprite(textureSnapShot);
我试过使用 FrameBuffer 如下:
SpriteBatch sb = new SpriteBatch();
sb.setProjectionMatrix(camera.combined);
FrameBuffer fbo = new FrameBuffer(Format.RGBA8888, texture_dialog.getWidth(), texture_dialog.getHeight(), false);
fbo.begin();
sb.begin();
sb.draw(texture_dialog, 0, 0);
sb.draw(btn_ok.getTexture(), texture_dialog.getWidth()/2 - btn_ok.getWidth()/2, 52);
sb.end();
fbo.end();
sb.dispose();
textureSnapShot = fbo.getColorBufferTexture();
//textureSnapShot.setFilter(TextureFilter.MipMapLinearLinear, TextureFilter.MipMapLinearLinear);
spriteSnapShot = new Sprite(textureSnapShot);
结果如下:
http://medialinestudio.co.za/screens.png
左:像素图右:FrameBuffer
Pixmap 有正确的结果但太慢了。 FrameBuffer 更快但结果不正确
FBO 绝对是您应该使用的。
读这个 post : libgdx SpriteBatch render to texture
你缺少的是:
- 创建一个具有正确 width/height 和位置的相机,以适合 FBO 视口内的绘图 (0,0,Width,Height)
- 翻转输出纹理 (m_fboRegion.flip(false, true))
您好,我需要创建一个由其他纹理叠加而成的纹理。我试过使用 pixmap,但速度很慢。这个想法是创建一个对话框的“快照”,以便它可以在显示和关闭时进行动画处理。请帮助
这是我正在使用的代码:
texture_dialog.getTextureData().prepare();
Pixmap pm1 = texture_dialog.getTextureData().consumePixmap();
btn_ok.getTexture().getTextureData().prepare();
Pixmap pm = btn_ok.getTexture().getTextureData().consumePixmap();
pm1.drawPixmap(pm, pm1.getWidth()/2 - pm.getWidth()/2, pm1.getHeight() - pm.getHeight() - 52);
textureSnapShot = new Texture(pm1, true);
pm1.dispose();
pm.dispose();
textureSnapShot.setFilter(TextureFilter.MipMapLinearLinear, TextureFilter.MipMapLinearLinear);
spriteSnapShot = new Sprite(textureSnapShot);
我试过使用 FrameBuffer 如下:
SpriteBatch sb = new SpriteBatch();
sb.setProjectionMatrix(camera.combined);
FrameBuffer fbo = new FrameBuffer(Format.RGBA8888, texture_dialog.getWidth(), texture_dialog.getHeight(), false);
fbo.begin();
sb.begin();
sb.draw(texture_dialog, 0, 0);
sb.draw(btn_ok.getTexture(), texture_dialog.getWidth()/2 - btn_ok.getWidth()/2, 52);
sb.end();
fbo.end();
sb.dispose();
textureSnapShot = fbo.getColorBufferTexture();
//textureSnapShot.setFilter(TextureFilter.MipMapLinearLinear, TextureFilter.MipMapLinearLinear);
spriteSnapShot = new Sprite(textureSnapShot);
结果如下: http://medialinestudio.co.za/screens.png
左:像素图右:FrameBuffer
Pixmap 有正确的结果但太慢了。 FrameBuffer 更快但结果不正确
FBO 绝对是您应该使用的。
读这个 post : libgdx SpriteBatch render to texture
你缺少的是:
- 创建一个具有正确 width/height 和位置的相机,以适合 FBO 视口内的绘图 (0,0,Width,Height)
- 翻转输出纹理 (m_fboRegion.flip(false, true))