home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.5 Applications 2004 May / SGI IRIX 6.5 Applications 2004 May.iso / dist / java3d.idb / usr / demos / java / j3d / programs / examples / LOD / LOD.java.z / LOD.java
Encoding:
Java Source  |  2003-08-08  |  5.8 KB  |  175 lines

  1. /*
  2.  *    @(#)LOD.java 1.13 02/10/21 13:44:04
  3.  *
  4.  * Copyright (c) 1996-2002 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  *
  10.  * - Redistributions of source code must retain the above copyright
  11.  *   notice, this list of conditions and the following disclaimer.
  12.  *
  13.  * - Redistribution in binary form must reproduce the above copyright
  14.  *   notice, this list of conditions and the following disclaimer in
  15.  *   the documentation and/or other materials provided with the
  16.  *   distribution.
  17.  *
  18.  * Neither the name of Sun Microsystems, Inc. or the names of
  19.  * contributors may be used to endorse or promote products derived
  20.  * from this software without specific prior written permission.
  21.  *
  22.  * This software is provided "AS IS," without a warranty of any
  23.  * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
  24.  * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
  25.  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
  26.  * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
  27.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  28.  * DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
  29.  * OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
  30.  * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
  31.  * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
  32.  * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,
  33.  * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  34.  *
  35.  * You acknowledge that Software is not designed,licensed or intended
  36.  * for use in the design, construction, operation or maintenance of
  37.  * any nuclear facility.
  38.  */
  39.  
  40. import java.applet.Applet;
  41. import java.awt.*;
  42. import java.awt.event.*;
  43. import com.sun.j3d.utils.applet.MainFrame;
  44. import com.sun.j3d.utils.geometry.*;
  45. import com.sun.j3d.utils.behaviors.vp.*;
  46. import com.sun.j3d.utils.universe.*;
  47. import javax.media.j3d.*;
  48. import javax.vecmath.*;
  49.  
  50. public class LOD extends Applet {
  51.  
  52.     private SimpleUniverse u = null;
  53.     
  54.     public BranchGroup createSceneGraph() {
  55.     // Create the root of the branch graph
  56.     BranchGroup objRoot = new BranchGroup();
  57.  
  58.     createLights(objRoot);
  59.  
  60.     // Create the transform group node and initialize it to the
  61.     // identity.  Enable the TRANSFORM_WRITE capability so that
  62.     // our behavior code can modify it at runtime.  Add it to the
  63.     // root of the subgraph.
  64.     TransformGroup objTrans = new TransformGroup();
  65.     objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
  66.     objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
  67.     objRoot.addChild(objTrans);
  68.  
  69.     // Create a switch to hold the different levels of detail
  70.     Switch sw = new Switch(0);
  71.     sw.setCapability(javax.media.j3d.Switch.ALLOW_SWITCH_READ);
  72.     sw.setCapability(javax.media.j3d.Switch.ALLOW_SWITCH_WRITE);
  73.  
  74.  
  75.     // Create several levels for the switch, with less detailed
  76.     // spheres for the ones which will be used when the sphere is
  77.     // further away
  78.     sw.addChild(new Sphere(0.4f, Sphere.GENERATE_NORMALS, 40));
  79.     sw.addChild(new Sphere(0.4f, Sphere.GENERATE_NORMALS, 20));
  80.     sw.addChild(new Sphere(0.4f, Sphere.GENERATE_NORMALS, 10));
  81.     sw.addChild(new Sphere(0.4f, Sphere.GENERATE_NORMALS, 3));
  82.  
  83.     // Add the switch to the main group
  84.     objTrans.addChild(sw);
  85.  
  86.     BoundingSphere bounds =
  87.         new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
  88.  
  89.     // set up the DistanceLOD behavior
  90.     float[] distances = new float[3];
  91.     distances[0] = 5.0f;
  92.     distances[1] = 10.0f;
  93.     distances[2] = 25.0f;
  94.     DistanceLOD lod = new DistanceLOD(distances);
  95.     lod.addSwitch(sw);
  96.     lod.setSchedulingBounds(bounds);
  97.     objTrans.addChild(lod);
  98.  
  99.         // Have Java 3D perform optimizations on this scene graph.
  100.         objRoot.compile();
  101.  
  102.     return objRoot;
  103.     }
  104.  
  105.     private void createLights(BranchGroup graphRoot) {
  106.  
  107.         // Create a bounds for the light source influence
  108.         BoundingSphere bounds =
  109.             new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
  110.  
  111.         // Set up the global, ambient light
  112.         Color3f alColor = new Color3f(0.2f, 0.2f, 0.2f);
  113.         AmbientLight aLgt = new AmbientLight(alColor);
  114.         aLgt.setInfluencingBounds(bounds);
  115.         graphRoot.addChild(aLgt);
  116.  
  117.         // Set up the directional (infinite) light source
  118.         Color3f lColor1 = new Color3f(0.9f, 0.9f, 0.9f);
  119.         Vector3f lDir1  = new Vector3f(1.0f, 1.0f, -1.0f);
  120.         DirectionalLight lgt1 = new DirectionalLight(lColor1, lDir1);
  121.         lgt1.setInfluencingBounds(bounds);
  122.         graphRoot.addChild(lgt1);
  123.     }
  124.  
  125.  
  126.     public LOD() {
  127.     }
  128.  
  129.     public void init() {
  130.     setLayout(new BorderLayout());
  131.         GraphicsConfiguration config =
  132.            SimpleUniverse.getPreferredConfiguration();
  133.  
  134.         Canvas3D c = new Canvas3D(config);
  135.     add("Center", c);
  136.  
  137.     // Create a simple scene and attach it to the virtual universe
  138.     BranchGroup scene = createSceneGraph();
  139.     u = new SimpleUniverse(c);
  140.  
  141.     // only add zoom mouse behavior to viewingPlatform
  142.     ViewingPlatform viewingPlatform = u.getViewingPlatform();
  143.     
  144.         // This will move the ViewPlatform back a bit so the
  145.         // objects in the scene can be viewed.
  146.     viewingPlatform.setNominalViewingTransform();
  147.  
  148.     // add orbit behavior to the ViewingPlatform, but disable rotate
  149.     // and translate
  150.     OrbitBehavior orbit = new OrbitBehavior(c,
  151.                         OrbitBehavior.REVERSE_ZOOM |
  152.                         OrbitBehavior.DISABLE_ROTATE |
  153.                         OrbitBehavior.DISABLE_TRANSLATE);
  154.     BoundingSphere bounds =
  155.         new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0);
  156.     orbit.setSchedulingBounds(bounds);
  157.     viewingPlatform.setViewPlatformBehavior(orbit);
  158.  
  159.  
  160.     u.addBranchGraph(scene);
  161.     }
  162.  
  163.     public void destroy() {
  164.     u.cleanup();
  165.     }
  166.  
  167.     //
  168.     // The following allows LOD to be run as an application
  169.     // as well as an applet
  170.     //
  171.     public static void main(String[] args) {
  172.     new MainFrame(new LOD(), 512, 512);
  173.     }
  174. }
  175.