Canvas3D in Graphics2D, bzw. BufferedImage rendern

firmadankt

Mitglied
Hallo zusammen,

ich möchte einen java3D Szene in ein BufferedImage zeichnen. Es soll offscreen passieren, d.h. ich möchte das Canvas3D nicht in meine Swing, bzw. AWT-Hierarchy einhängen.

Meine ersten Gehversuche sehen wie folgt aus:

// g wird mit BufferedImage.createGraphics() erstellt
Code:
public void render(Graphics2D g) { 
        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();

        BufferedImage bImage = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB);

        Canvas3D canvas3D = new Canvas3D(config, true);
        initScene(canvas3D); // initScene erstellt einen Szenegraphen, der onscrren auch correct gerendert wird (wurde aus den java3d-Examples übernommen)

        // folgende Parameter wurden von dem onscreen canvas3D übernommen,
        // aber ich bin mir nicht sicher ob das alles so stimmt
        canvas3D.setSize(200, 200);
        Screen3D sOff = canvas3D.getScreen3D();
        sOff.setSize(400, 400);
        sOff.setPhysicalScreenWidth(0.5418666666666667);
        sOff.setPhysicalScreenHeight(0.33866666666666667);

        ImageComponent2D buffer = new
                ImageComponent2D(ImageComponent.FORMAT_RGB, bImage);
        buffer.setCapability(ImageComponent2D.ALLOW_IMAGE_READ);

        canvas3D.setOffScreenBuffer(buffer);
        canvas3D.renderOffScreenBuffer();
        canvas3D.waitForOffScreenRendering();

        g.drawImage(bImage, 0, 0, null);
    }

Das Resultat ist ein leeres (schwarzes Image).

Danke schon mal im Voraus für eure Anregungen.
 
Zurück