2016-04-25 85 views
1

我有一個網格,我已經使用texture.bind()在渲染循環中綁定了紋理。libgdx mesh截圖原始分辨率

紋理的原始分辨率爲1024 x 1024我的臺式機屏幕分辨率爲1366 * 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(); 

但它在因爲較低的顯示器的分辨率(getBackBufferHeight變爲750在這種情況下)的1024x750分辨率保存圖像。

我現在想捕捉/保存修改後的圖像(使用網格三角形進行修改)。我現在需要做什麼來獲取修改後的1024x1024圖像?我是否應該使用ScrollPane以原始分辨率顯示圖像,以便在截取屏幕截圖時獲得1024x1024?

回答

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(); 
+0

謝謝你的男人!它現在有效。你又救了我一次:) –