Demo 5:HelloUniverse5.java |
Notes:Again this uses MyGeom.java, this time we give the shape an appearance. The Code for MyGeom is the same as it was in Demo 4. The sceneGraph still looks like:
canvas3d
|
V
simpleUniverse
|
V
BranchGroup scene -------------------,
| |
V V
TransforGroup trans < ~ ~ ~ ~ ~ MouseRotate mr
|
V
MyGeom
|
Code:
// Adapted from java3d HelloUniverse Demo
/*
* simply creates a cube an adds it to a universe, also allows the user to rotate the
* cube via the mouse
*/
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.awt.GraphicsConfiguration;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
public class HelloUniverse3 extends Applet {
private SimpleUniverse u = null;
public BranchGroup createSceneGraph() {
// Create the root of the branch graph
BranchGroup objRoot = new BranchGroup();
// Create a transform group, so we can manipulate the object
TransformGroup trans = new TransformGroup();
// create a behavior to allow the user to move the object with the mouse
MouseRotate mr = new MouseRotate();
// tell the behavior which transform Group it is operating on
mr.setTransformGroup(trans);
// create the bounds for rotate behavior (centered at the origin)
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
mr.setSchedulingBounds(bounds);
// add the Rotate Behavior to the root.(not the transformGroup
objRoot.addChild(mr);
// since the transfom in the transformGroup will be changing when we rotate the object
// we need to explicitly allow the transform to be read, and written.
trans.setCapability(trans.ALLOW_TRANSFORM_READ);
trans.setCapability(trans.ALLOW_TRANSFORM_WRITE);
//------------------------------------------------------------------------v
// Create a new Appearance
Appearance appearance = new Appearance();
// Specify that we are not using a texture
appearance.setTexture(null);
// Create the polygon attributes to display only the wireframe
PolygonAttributes pa = new PolygonAttributes();
pa.setPolygonMode(pa.POLYGON_LINE);
pa.setCullFace(pa.CULL_NONE);
// set the polygon attributes
appearance.setPolygonAttributes(pa);
// Create a MyGeom shape with an Appearance; add it to the TransformGroup
trans.addChild(new MyGeom(0.4f,appearance));
//------------------------------------------------------------------------^
// add the transform group (and therefore also the cube) to the scene
objRoot.addChild(trans);
// Have Java 3D perform optimizations on this scene graph.
objRoot.compile();
return objRoot;
}
public HelloUniverse3() {
}
public void init() {
setLayout(new BorderLayout());
GraphicsConfiguration config =
SimpleUniverse.getPreferredConfiguration();
Canvas3D c = new Canvas3D(config);
add("Center", c);
// Create a simple scene and attach it to the virtual universe
BranchGroup scene = createSceneGraph();
u = new SimpleUniverse(c);
// This will move the ViewPlatform back a bit so the
// objects in the scene can be viewed.
u.getViewingPlatform().setNominalViewingTransform();
// add the objects to the universe
u.addBranchGraph(scene);
}
public void destroy() {
u.removeAllLocales();
}
//
// The following allows HelloUniverse to be run as an application
// as well as an applet
//
public static void main(String[] args) {
new MainFrame(new HelloUniverse3(), 256, 256);
}
}
|