libgdx mesh截图原始分辨率

时间:2016-04-25 08:09:38

标签: libgdx screenshot mesh scene2d

我有一个网格,我使用texture.bind()在渲染循环中绑定了一个纹理;

纹理的原始分辨率为1024 x 1024.我的桌面屏幕分辨率为1366 x 768。

因此,我在网格三角形中进行了一些更改,以修改纹理的外观。我在这里和那里移动一些三角形以获得最终图像。现在,我想以原始分辨率保存该图像,但如果我使用图像的原始像素图,则会在1024x1024修改之前保存原始图像。但我想将修改后的图像保存在1024x1024中。

我还使用了截图代码:

byte[] pixels = ScreenUtils.getFrameBufferPixels(0, 0, Gdx.graphics.getBackBufferWidth(), Gdx.graphics.getBackBufferHeight(), true);
Pixmap pixmap = new Pixmap(Gdx.graphics.getBackBufferWidth(), Gdx.graphics.getBackBufferHeight(), Pixmap.Format.RGBA8888);
BufferUtils.copy(pixels, 0, pixmap.getPixels(), pixels.length);
PixmapIO.writePNG(Gdx.files.local("saved/screenshot.png"), pixmap);
pixmap.dispose();

但由于显示器分辨率较低,它以1024x750的分辨率保存图像(在这种情况下,getBackBufferHeight变为750)。

我现在想要捕获/保存修改后的图像(使用网格三角形修改)。我现在需要做什么才能获得修改后的1024x1024图像?我应该使用ScrollPane以原始分辨率显示图像,这样当我拍摄截图时,我会得到1024x1024吗?

1 个答案:

答案 0 :(得分:1)

在正确大小的帧缓冲区上进行修改,而不是屏幕的后台缓冲区。但要警惕设备是否支持RGBA8888用于帧缓冲区(OpenGL ES 2.0不需要它,因此有些GPU不支持它)。

int width = 1024;
int height = 1024;
FrameBuffer frameBuffer;
try {
    frameBuffer = new FrameBuffer(Pixmap.Format.RGBA8888, width, height, false);
} catch (GdxRuntimeException e) {
    frameBuffer = new FrameBuffer(Pixmap.Format.RGB565, width, height, false);
}
frameBuffer.begin();
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
//draw your texture and do your manipulations.

byte[] pixels = ScreenUtils.getFrameBufferPixels(0, 0, width, height, true);
Pixmap pixmap = new Pixmap(width, height, Pixmap.Format.RGBA8888);
BufferUtils.copy(pixels, 0, pixmap.getPixels(), pixels.length);
PixmapIO.writePNG(Gdx.files.local("saved/screenshot.png"), pixmap);
pixmap.dispose();

frameBuffer.end();
frameBuffer.dispose();