Java 3D to PNG file?
"Richard O. Hammer" <[email protected]>
| Newsgroups | gmane.org.user-groups.trijug.juglist |
|---|---|
| Message-ID | <[email protected]> |
I am creating a scene using the Java3D API. I want to write this
picture into a PNG file rather than display it in a Window. How can I
do this?
I am starting with the class below, HelloJava3Db, distributed by Sun
with their 3D tutorial. It makes a picture of a colored cube and shows
it in a Window (Frame or Applet). But I can't figure out how to write
that picture into an image file.
I've been looking for routes using Canvas, java.awt.image.BufferedImage
and javax.imageio.ImageIO, but have not found the trick yet.
Thank you,
Rich Hammer
/* Copyright (c) 1996-2000 Sun Microsystems, Inc. All Rights Reserved.
blah, blah
*/
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;
// HelloJava3Db renders a single, rotated cube.
public class HelloJava3Db extends Applet {
public BranchGroup createSceneGraph() {
// Create the root of the branch graph
BranchGroup objRoot = new BranchGroup();
// rotate object has composited transformation matrix
Transform3D rotate = new Transform3D();
Transform3D tempRotate = new Transform3D();
rotate.rotX(Math.PI / 4.0d);
tempRotate.rotY(Math.PI / 5.0d);
rotate.mul(tempRotate);
TransformGroup objRotate = new TransformGroup(rotate);
objRoot.addChild(objRotate);
objRotate.addChild(new ColorCube(0.4));
// Let Java 3D perform optimizations on this scene graph.
objRoot.compile();
return objRoot;
} // end of CreateSceneGraph method of HelloJava3Db
// Create a simple scene and attach it to the virtual universe
public HelloJava3Db() {
setLayout(new BorderLayout());
GraphicsConfiguration config =
SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas3D = new Canvas3D(config);
add("Center", canvas3D);
BranchGroup scene = createSceneGraph();
// SimpleUniverse is a Convenience Utility class
SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
// This will move the ViewPlatform back a bit so the
// objects in the scene can be viewed.
simpleU.getViewingPlatform().setNominalViewingTransform();
simpleU.addBranchGraph(scene);
} // end of HelloJava3Db (constructor)
// The following allows this to be run as an application
// as well as an applet
public static void main(String[] args) {
new MainFrame(new HelloJava3Db(), 256, 256);
} // end of main (method of HelloJava3Db)
} // end of class HelloJava3Db