libgdx 网格截图原始分辨率

libgdx mesh screenshot original resolution

我有一个网格,我使用 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)。

我现在想要 capture/save 修改后的图像(使用网格三角形修改)。我现在究竟需要做什么才能获得修改后的 1024x1024 图像?我是否应该使用 ScrollPane 以其原始分辨率显示图像,以便在截取屏幕截图时得到 1024x1024?

在正确大小的帧缓冲区而不是屏幕的后台缓冲区上进行修改。但要注意设备是否支持帧缓冲区的 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();