1
Hallo ich habe versucht, http://www.java2s.com/Code/Java/3D/OffScreenTest.htm zu einem einfachen Test anzupassen, der einen Farbwürfel in Datei rendert.Canvas3D in Datei schreiben
Aber mein img.png enthält nur schwarze Farbe und das Programm wird nie beendet.
import java.awt.Dimension;
import java.awt.GraphicsConfiguration;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.ImageComponent;
import javax.media.j3d.ImageComponent2D;
import javax.media.j3d.Screen3D;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;
public class HelloJava3Db {
public static void main(String[] args) {
// create canvas
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas3D = new Canvas3D(config, true);
// create universe
SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
simpleU.getViewingPlatform().setNominalViewingTransform();
// create scene
BranchGroup scene = new BranchGroup();
scene.addChild(new ColorCube(0.4));
scene.compile();
simpleU.addBranchGraph(scene);
// set off screen size
Screen3D sOff = canvas3D.getScreen3D();
sOff.setSize(new Dimension(200, 200));
sOff.setPhysicalScreenWidth(200);
sOff.setPhysicalScreenHeight(200);
// render to off screen
BufferedImage bImage = new BufferedImage(200, 200, BufferedImage.TYPE_INT_ARGB);
ImageComponent2D buffer = new ImageComponent2D(ImageComponent.FORMAT_RGBA, bImage);
buffer.setCapability(ImageComponent2D.ALLOW_IMAGE_READ);
canvas3D.setOffScreenBuffer(buffer);
canvas3D.renderOffScreenBuffer();
canvas3D.waitForOffScreenRendering();
// write to file
File output = new File("img.png");
try {
ImageIO.write(bImage, "png", output);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(output.getAbsolutePath());
simpleU.cleanup();
}
}
Vielen Dank, dass Sie Ihre Ergebnisse veröffentlicht haben. Wir werden prüfen, ob die offiziellen Beispiele in java3d-Beispielen für Offscreen-Rendering auf Github funktionieren. Ich hoffe, dass Sie die neueste Version von Java3D verwenden, nicht die von Oracle zur Verfügung gestellte Version. – gouessej
Ich habe 1.5.1 verwendet, 1.6.1 scheint im Beta-Status zu sein? – wutzebaer
Es gibt keine Version mit dem Namen "1.6.1". Es gibt eine Version namens 1.6.0-pre12. Die Version 1.5.1 war die letzte Version von Oracle/Sun Microsystems. Die Version 1.5.2 wurde von der Community bereitgestellt. Die Version 1.6.0 ist die einzige beibehaltene Version (von der JogAmp-Community). Die Version 1.7 enthält einige bahnbrechende Änderungen, einige Pakete wurden umbenannt und ein wichtiger Beitrag wird OpenGL-ES-Unterstützung hinzufügen. Sie können einige Informationen über die Installation hier finden: http://jogamp.org/wiki/index.php/Downloading_and_installing_Java3D http://jogamp.org/wiki/index.php/Java3D_Overview – gouessej