Mega Code Archive

 
Categories / Java / 3D Graphics
 

Red Green Griffin

// Copyright 2001 Resplendent Technology Ltd. greg@resplendent.com import java.applet.Applet; import java.awt.FlowLayout; import java.awt.GraphicsConfiguration; import java.net.URL; import java.util.Enumeration; import java.util.Hashtable; import javax.media.j3d.AmbientLight; import javax.media.j3d.Appearance; import javax.media.j3d.BoundingSphere; import javax.media.j3d.BranchGroup; import javax.media.j3d.Canvas3D; import javax.media.j3d.DirectionalLight; import javax.media.j3d.Material; import javax.media.j3d.RenderingAttributes; import javax.media.j3d.Shape3D; import javax.media.j3d.Transform3D; import javax.media.j3d.TransformGroup; import javax.media.j3d.TransparencyAttributes; import javax.vecmath.Color3f; import javax.vecmath.Point3d; import javax.vecmath.Vector3f; import com.sun.j3d.loaders.Scene; import com.sun.j3d.loaders.objectfile.ObjectFile; import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.behaviors.keyboard.KeyNavigatorBehavior; import com.sun.j3d.utils.behaviors.mouse.MouseRotate; import com.sun.j3d.utils.behaviors.mouse.MouseTranslate; import com.sun.j3d.utils.universe.SimpleUniverse; public class RedGreenGriffin extends Applet {   protected Canvas3D c1 = new Canvas3D(SimpleUniverse       .getPreferredConfiguration());   // private Canvas3D c2 = new   // Canvas3D(SimpleUniverse.getPreferredConfiguration());   private static MainFrame mf;   protected SimpleUniverse u = null;   protected BranchGroup scene = null;   protected String URLString = "http://www.java3d.org/saurus.obj";   protected float eyeOffset = 0.03F;   protected static int size = 600;   public void init() {     setLayout(new FlowLayout());     GraphicsConfiguration config = SimpleUniverse         .getPreferredConfiguration();     String v = getParameter("url");     if (v != null) {       URLString = v;     }     c1.setSize(size, size);     add(c1);     scene = createSceneGraph(0);     u = new SimpleUniverse(c1);     // This will move the ViewPlatform back a bit so the     // objects in the scene can be viewed.     //u.getViewingPlatform().setNominalViewingTransform();     u.addBranchGraph(scene);   }   public BranchGroup createSceneGraph(int i) {     System.out.println("Creating scene for: " + URLString);     // Create the root of the branch graph     BranchGroup objRoot = new BranchGroup();     try {       Transform3D myTransform3D = new Transform3D();       myTransform3D.setTranslation(new Vector3f(+0.0f, -0.15f, -3.6f));       TransformGroup objTrans = new TransformGroup(myTransform3D);       objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);       Transform3D t = new Transform3D();       TransformGroup tg = new TransformGroup(t);       tg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);       tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);       objTrans.addChild(tg);       URL url = new URL(URLString);       ObjectFile f = new ObjectFile();       f.setFlags(ObjectFile.RESIZE | ObjectFile.TRIANGULATE           | ObjectFile.STRIPIFY);       System.out.println("About to load");       Scene s = f.load(url);       Transform3D myTrans = new Transform3D();       myTrans.setTranslation(new Vector3f(eyeOffset, -eyeOffset, 0F));       TransformGroup mytg = new TransformGroup(myTrans);       //mytg.addChild(s.getSceneGroup());       tg.addChild(mytg);       Transform3D myTrans2 = new Transform3D();       myTrans2.setTranslation(new Vector3f(-eyeOffset, +eyeOffset, 0F));       TransformGroup mytg2 = new TransformGroup(myTrans2);       //mytg2.addChild(s.getSceneGroup());       Hashtable table = s.getNamedObjects();       for (Enumeration e = table.keys(); e.hasMoreElements();) {         Object key = e.nextElement();         System.out.println(key);         Object obj = table.get(key);         System.out.println(obj.getClass().getName());         Shape3D shape = (Shape3D) obj;         //shape.setCapability(Shape3D.ALLOW_APPEARANCE_WRITE);         Appearance ap = new Appearance();         Color3f black = new Color3f(0.0f, 0.0f, 0.0f);         Color3f red = new Color3f(0.7f, .0f, .15f);         Color3f green = new Color3f(0f, .7f, .15f);         ap.setMaterial(new Material(green, black, green, black, 1.0f));         Appearance ap2 = new Appearance();         ap2.setMaterial(new Material(red, black, red, black, 1.0f));         float transparencyValue = 0.5f;         TransparencyAttributes t_attr = new TransparencyAttributes(             TransparencyAttributes.BLENDED, transparencyValue,             TransparencyAttributes.BLEND_SRC_ALPHA,             TransparencyAttributes.BLEND_ONE);         ap2.setTransparencyAttributes(t_attr);         ap2.setRenderingAttributes(new RenderingAttributes());         ap.setTransparencyAttributes(t_attr);         ap.setRenderingAttributes(new RenderingAttributes());         // bg.addChild(ap);         shape.setAppearance(ap);         mytg2.addChild(new Shape3D(shape.getGeometry(), ap2));         mytg.addChild(new Shape3D(shape.getGeometry(), ap));       }       tg.addChild(mytg2);       System.out.println("Finished Loading");       BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0,           0.0), 100.0);       Color3f light1Color = new Color3f(.9f, 0.9f, 0.9f);       Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);       DirectionalLight light1 = new DirectionalLight(light1Color,           light1Direction);       light1.setInfluencingBounds(bounds);       objTrans.addChild(light1);       // Set up the ambient light       Color3f ambientColor = new Color3f(1.0f, .4f, 0.3f);       AmbientLight ambientLightNode = new AmbientLight(ambientColor);       ambientLightNode.setInfluencingBounds(bounds);       objTrans.addChild(ambientLightNode);       MouseRotate behavior = new MouseRotate();       behavior.setTransformGroup(tg);       objTrans.addChild(behavior);       // Create the translate behavior node       MouseTranslate behavior3 = new MouseTranslate();       behavior3.setTransformGroup(tg);       objTrans.addChild(behavior3);       behavior3.setSchedulingBounds(bounds);       KeyNavigatorBehavior keyNavBeh = new KeyNavigatorBehavior(tg);       keyNavBeh.setSchedulingBounds(new BoundingSphere(new Point3d(),           1000.0));       objTrans.addChild(keyNavBeh);       behavior.setSchedulingBounds(bounds);       objRoot.addChild(objTrans);     } catch (Throwable t) {       System.out.println("Error: " + t);     }     return objRoot;   }   public RedGreenGriffin() {   }   public void destroy() {     u.removeAllLocales();   }   public static void main(String[] args) {     RedGreenGriffin s = new RedGreenGriffin();     if (args.length > 0) {       s.URLString = args[0];     }     mf = new MainFrame(s, size, size);   } }