Mercurial > hg > jslab
view examples/java3d/hello7.java @ 1:5df24c91468d
Oh my what a mess.
author | samer |
---|---|
date | Fri, 05 Apr 2019 16:26:00 +0100 |
parents | |
children |
line wrap: on
line source
/* hello7.java Construct universe without using SimpleUniverse utility class - this puts together the view group explicitly. Now has dynamically creatable views all on the same view platform. Left and right eye views available! */ import samer.core.*; import java.awt.event.*; import javax.media.j3d.*; import javax.vecmath.*; import samer.core.Node; public class hello7 extends util implements Agent { // create universe LocalUniverse U=new LocalUniverse(); BranchGroup root=new BranchGroup(); ViewPlatform VP=new ViewPlatform(); public static void main(String[] arse) { init(); new hello7(); } public hello7() { // create scene root.addChild(createSceneGraph()); // addBackground(root,new Background(0.1f,0.2f,0.15f)); // addLights(root); { // view platform placement TransformGroup VT=new TransformGroup(); Transform3D t=new Transform3D(); t.lookAt(new Point3d(0,16,20), new Point3d(0,0,0),new Vector3d(0,1,0)); t.invert(); VT.setTransform(t); // !!! all key navigators seem to be slaved! addKeyNavigator(VT,readwrite(VT)); VT.addChild(VP); root.addChild(VT); } // setCapability(ALLOW_DETACH); // setCapability(ALLOW_CHILDREN_WRITE); // compile(); // add two Views on same platform new view("left",VP); new view("right",VP); // root.setCapability(Group.ALLOW_CHILDREN_EXTEND); // root.setCapability(Group.ALLOW_CHILDREN_WRITE); root.compile(); U.addGroup(root); Shell.registerAgent(this); Shell.exposeCommands(this); } public void getCommands(Agent.Registry r) { r.add("view"); r.setTarget(null); r.add("start").add("stop"); } public void execute(String cmd, Environment env) throws Exception { if (cmd.equals("view")) { new view(X.string(env.datum("name"),"view"),VP); } } private static TransformGroup createSceneGraph() { Transform3D r=new Transform3D(); // r.rotX(Math.PI/2); TransformGroup t2=new TransformGroup(r); t2.addChild(yoyoGroup()); TransformGroup tg = new TransformGroup(); addRotator(tg); tg.addChild(t2); return tg; } public class view extends View implements Agent { Node node; Canvas3D canvas; Shell.Window win; public view(String name, ViewPlatform VP) { node = new Node(name); Shell.push(node); // create view bits canvas=new Canvas3D(getGraphicsConfiguration()); //if (name.equals("left")) canvas.setMonoscopicViewPolicy(Canvas3D.LEFT_EYE); //else if (name.equals("right")) canvas.setMonoscopicViewPolicy(Canvas3D.RIGHT_EYE); addCanvas3D(canvas); setPhysicalBody(new PhysicalBody()); setPhysicalEnvironment(new PhysicalEnvironment()); setWindowEyepointPolicy(View.RELATIVE_TO_WINDOW); //setWindowResizePolicy(View.VIRTUAL_WORLD); setFrontClipDistance(Shell.getDouble("front",1)); setBackClipDistance(Shell.getDouble("back",10)); if (name.equals("left")) setMonoscopicViewPolicy(LEFT_EYE_VIEW); else if (name.equals("right")) setMonoscopicViewPolicy(RIGHT_EYE_VIEW); attachViewPlatform(VP); Shell.pop(); win=Shell.getWindow(name); win.container().add(canvas); win.expose(); win.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); } }); Shell.registerAgent(this); } public void dispose() { // stopView(); Shell.deregisterAgent(this); win.dispose(); } protected void finalize() { Shell.trace("finalizing view "+this); } public void getCommands(Agent.Registry r) { r.add("start").add("stop"); } public void execute(String cmd, Environment env) { if (cmd.equals("start")) { startView(); } else if (cmd.equals("stop")) { stopView(); } } } }