public BufferedImage getRenderedImage(Dimension d, boolean withBackground) { if (offscreenCanvas == null) { offscreenCanvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration(), true); } offscreenCanvas.setSize(getSize()); offscreenCanvas.getScreen3D().setSize(getScreen3D().getSize()); offscreenCanvas.getScreen3D().setPhysicalScreenWidth(getScreen3D().getPhysicalScreenWidth()); offscreenCanvas.getScreen3D().setPhysicalScreenHeight(getScreen3D().getPhysicalScreenHeight()); BufferedImage bufImage = new BufferedImage(d.width, d.height, BufferedImage.TYPE_INT_ARGB); ImageComponent2D imgComp = new ImageComponent2D(ImageComponent2D.FORMAT_RGBA, bufImage); BufferedImage transparentImage = new BufferedImage(d.width, d.height, BufferedImage.TYPE_INT_ARGB); ImageComponent2D transparentComp = new ImageComponent2D(ImageComponent2D.FORMAT_RGBA, transparentImage); Color3f tempColor = new Color3f(); background.getColor(tempColor); if (!withBackground) { background.setImage(transparentComp); } view.addCanvas3D(offscreenCanvas); offscreenCanvas.setOffScreenBuffer(imgComp); offscreenCanvas.renderOffScreenBuffer(); offscreenCanvas.waitForOffScreenRendering(); if (!withBackground) { background.setImage(null); } bufImage = offscreenCanvas.getOffScreenBuffer().getImage(); // To release the reference of buffer inside Java 3D. offscreenCanvas.setOffScreenBuffer(null); view.removeCanvas3D(offscreenCanvas); return bufImage; }