저는 처음에 libgdx
입니다. 작동하는 게임 엔진에서 ~ 100 개의 개체를 썸글 네일 크기의 이미지로 렌더링하려고합니다. 표시 할 수있는 Java Image
입니다. Swing
응용 프로그램입니다.libgdx에서 Java 이미지로 완전히 벗어난 화면으로 렌더링합니다.
나는 LwjglCanvas 잘 내에서 화면을 렌더링 할 수있는, 거기에서 나는 그들의 픽셀 ScreenUtils.getFrameBufferPixels()
(graphics
로 렌더링되는 아무것도에서 LwjglCanvas.paint(graphics)
방법 결과에 BufferedImage
의 getGraphics()
전달하려고)를 사용하여 잡아 수 있으며, 그들을 BufferedImage
에 넣으십시오. 그러나 이것은 기존의 표시가 필요합니다. LwjglCanvas
; 화면에 렌더링하지 않고 백그라운드 스레드 미리보기를 수행하는 방법을 알아낼 수 없습니다.
현재 코드 스 니펫 첨부 (캔버스에 표시된 이미지가 필요,이 캔버스에 canvas.postRunnable()
을 통해 게시 됨) 내에서 실행됩니다.
// canvas is an LwjglAWTCanvas
int w = canvas.getGraphics().getWidth();
int h = canvas.getGraphics().getHeight();
BufferedImage bi = new BufferedImage(w, h,
BufferedImage.TYPE_INT_ARGB);
WritableRaster wr = bi.getRaster();
byte[] bytes = ScreenUtils.getFrameBufferPixels(0, 0, w, h, false);
int[] pixel = new int[4];
for (int y = h-1, b = 0; y >=0 h; y--) {
for (int x = 0; x < w; x++) {
pixel[0] = bytes[b++];
pixel[1] = bytes[b++];
pixel[2] = bytes[b++];
pixel[3] = bytes[b++];
wr.setPixel(x, y, pixel);
}
}
image = bi; // image is the rendered output image
이 시나리오에서는 FBO를 사용하는 예를 살펴 보았습니다. 그러나, 그것은 게임 객체 (이미지, 애니메이션, ...)를 FBO에 직접 렌더링하기 위해 모든 렌더링 (기본적으로 LwjglCanvas 및 헬퍼 클래스를 다시 구현해야 함)을 다시 작성해야하는 것처럼 보입니다. gdx noob , 나는 시작하기를 꺼린다. – tucuxi
@tucuxi 나는 fb.begin() 및 fb.end() 호출에서 기존 코드를 감쌀 수 있다고 생각한다. 상태 (렌더링 대상)는 OpenGL 내부에 보관되므로 java.awt 프리미티브를 사용하여 게임 객체를 렌더링하지 않는 한 아무 것도 변경하지 않아도됩니다. –
getFrameBufferPixels에 의해 FBO에서 픽셀을 다시 얻을 수 없습니다. 하지만 FBO에 첨부 된 텍스처를 Pixmap에 렌더링 한 다음 거기에서 픽셀을 읽을 수 있습니다. 또한 FBO를 사용하면 컬러 버퍼에서 직접 픽셀 액세스보다 더 효율적입니다. –