1

私は を初めて使用し、アプリケーションで表示できるlibgdxJava に、動作中のゲーム エンジンから ~100 個のオブジェクトの (サムネイル サイズの) 画像をレンダリングしようとしています。ImageSwing

LwjglCanvasファイン内で画面上にレンダリングできます。そこから、 を使用してピクセルを取得し(メソッドにをScreenUtils.getFrameBufferPixels()渡そうとすると、BufferedImageには何もレンダリングされません)、それらを に配置できます。ただし、これには既存の表示された ;が必要です。画面にレンダリングせずにバックグラウンド スレッドのサムネイル表示を行う方法がわかりません。getGraphics()LwjglCanvas.paint(graphics)graphicsBufferedImageLwjglCanvas

現在のコード スニペットを添付します (キャンバス内に表示された画像が必要です。Runnableこのキャンバスに投稿された内で実行されます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
4

1 に答える 1

2

FrameBufferオブジェクトが必要だと思います。これらは OpenGL ES 2.0 以降でサポートされており、OpenGL 描画コマンドをオフスクリーン バッファーに実行できます。

FBOが「最新」であれば、FBOでうまくいくと思いgetFrameBufferPixelsましたが、そうではないと言われました。(プリミティブは OpenGL で動作するようです。そのため、libGDX または OpenGL ES に何かが欠けているかどうかはわかりません。FBOs render to texture および glReadPixels を参照してください)。

于 2012-11-25T15:55:39.777 に答える