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 / ReadRaster / ReadRaster.java.z / ReadRaster.java
Encoding:
Java Source  |  2003-08-08  |  6.9 KB  |  218 lines

  1. /*
  2.  *    @(#)ReadRaster.java 1.14 02/10/21 13:53:38
  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.BorderLayout;
  42. import java.awt.event.*;
  43. import java.awt.image.DataBufferInt;
  44. import java.awt.image.BufferedImage;
  45. import java.awt.GraphicsConfiguration;
  46. import com.sun.j3d.utils.applet.MainFrame;
  47. import com.sun.j3d.utils.geometry.ColorCube;
  48. import com.sun.j3d.utils.universe.*;
  49. import javax.media.j3d.*;
  50. import javax.vecmath.*;
  51. import java.util.Enumeration;
  52.  
  53. public class ReadRaster extends Applet {
  54.  
  55.     private SimpleUniverse u = null;
  56.  
  57.     public BranchGroup createSceneGraph(BufferedImage bImage, 
  58.                     Raster readRaster) {
  59.  
  60.     // Create the root of the branch graph
  61.     BranchGroup objRoot = new BranchGroup();
  62.  
  63.     // Create a Raster shape. Add it to the root of the subgraph
  64.  
  65.         ImageComponent2D drawImageComponent = new ImageComponent2D(
  66.         ImageComponent.FORMAT_RGB, bImage);
  67.  
  68.         Raster drawRaster= new Raster(new Point3f(0.0f, 0.0f, 0.0f),
  69.         Raster.RASTER_COLOR, 0, 0, bImage.getWidth(), 
  70.         bImage.getHeight(), drawImageComponent, null);
  71.     Shape3D shape = new Shape3D(drawRaster);
  72.     drawRaster.setCapability(Raster.ALLOW_IMAGE_WRITE);
  73.     objRoot.addChild(shape);
  74.  
  75.     // Ceate the transform greup node and initialize it to the
  76.     // identity.  Enable the TRANSFORM_WRITE capability so that
  77.     // our behavior code can modify it at runtime.  Add it to the
  78.     // root of the subgraph.
  79.     TransformGroup objTrans = new TransformGroup();
  80.     objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
  81.  
  82.         TransformGroup cubeScale = new TransformGroup();
  83.         Transform3D t3d = new Transform3D();
  84.         t3d.setTranslation(new Vector3d(-0.5, 0.5, 0.0));
  85.         cubeScale.setTransform(t3d);
  86.  
  87.         cubeScale.addChild(objTrans);
  88.         objRoot.addChild(cubeScale);
  89.  
  90.     // Create a simple shape leaf node, add it to the scene graph.
  91.     objTrans.addChild(new ColorCube(0.3));
  92.  
  93.     // Create a new Behavior object that will perform the desired
  94.     // operation on the specified transform object and add it into
  95.     // the scene graph.
  96.     Transform3D yAxis = new Transform3D();
  97.     Alpha rotationAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE,
  98.                     0, 0,
  99.                     4000, 0, 0,
  100.                     0, 0, 0);
  101.     myRotationInterpolator rotator =
  102.         new myRotationInterpolator(drawRaster, readRaster,
  103.                      rotationAlpha, objTrans, yAxis,
  104.                      0.0f, (float) Math.PI*2.0f);
  105.     BoundingSphere bounds =
  106.         new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
  107.     rotator.setSchedulingBounds(bounds);
  108.     objTrans.addChild(rotator);
  109.  
  110.         // Have Java 3D perform optimizations on this scene graph.
  111.         objRoot.compile();
  112.  
  113.     return objRoot;
  114.     }
  115.  
  116.     public ReadRaster() {
  117.     }
  118.  
  119.     public void init() {
  120.     
  121.         int width = 128;
  122.     int height = 128;
  123.  
  124.     ImageComponent2D readImageComponent = new ImageComponent2D(
  125.         ImageComponent.FORMAT_RGB, width, height);
  126.  
  127.     Raster readRaster = new Raster(new Point3f(0.0f,0.0f,0.0f),
  128.                        Raster.RASTER_COLOR, 0, 0, width,
  129.                        height, readImageComponent, null);
  130.  
  131.     setLayout(new BorderLayout());
  132.         GraphicsConfiguration config =
  133.            SimpleUniverse.getPreferredConfiguration();
  134.  
  135.     Canvas3D c = new myCanvas3D(config, readRaster);
  136.     add("Center", c);
  137.  
  138.     // Create a simple scene and attach it to the virtual universe
  139.     BufferedImage bImage = new BufferedImage(width, height,
  140.                          BufferedImage.TYPE_INT_ARGB);
  141.  
  142.     BranchGroup scene = createSceneGraph(bImage, readRaster);
  143.     u = new SimpleUniverse(c);
  144.  
  145.         // This will move the ViewPlatform back a bit so the
  146.         // objects in the scene can be viewed.
  147.         u.getViewingPlatform().setNominalViewingTransform();
  148.  
  149.     u.addBranchGraph(scene);
  150.     }
  151.  
  152.     public void destroy() {
  153.     u.cleanup();
  154.     }
  155.  
  156.     //
  157.     // The following allows ReadRaster to be run as an application
  158.     // as well as an applet
  159.     //
  160.     public static void main(String[] args) {
  161.     new MainFrame(new ReadRaster(), 256, 256);
  162.     }
  163. }
  164.  
  165.  
  166. class myCanvas3D extends Canvas3D {
  167.  
  168.     Raster readRaster;
  169.     GraphicsContext3D gc;
  170.  
  171.     public myCanvas3D(GraphicsConfiguration graphicsConfiguration,
  172.     Raster readRaster) {
  173.  
  174.     super(graphicsConfiguration);
  175.     this.readRaster = readRaster;
  176.         gc = getGraphicsContext3D();
  177.     }
  178.  
  179.     public void postSwap() {
  180.     super.postSwap();
  181.     synchronized(readRaster) {
  182.             gc.readRaster(readRaster);
  183.     }
  184.     }
  185. }
  186.  
  187.  
  188. class myRotationInterpolator extends RotationInterpolator {
  189.     Point3f wPos = new Point3f(0.025f, -0.025f, 0.0f);
  190.     Raster drawRaster;
  191.     Raster readRaster;
  192.     BufferedImage bImage;
  193.     ImageComponent2D newImageComponent;
  194.  
  195.     public myRotationInterpolator(Raster drawRaster, Raster readRaster,
  196.                 Alpha alpha,
  197.                                 TransformGroup target,
  198.                                 Transform3D axisOfRotation,
  199.                                 float minimumAngle,
  200.                                 float maximumAngle) {
  201.  
  202.     super(alpha, target, axisOfRotation, minimumAngle, maximumAngle); 
  203.         this.drawRaster = drawRaster;
  204.         this.readRaster = readRaster;
  205.     }
  206.  
  207.     public void processStimulus(Enumeration criteria) {
  208.  
  209.     synchronized(readRaster) {
  210.         bImage = readRaster.getImage().getImage();
  211.     }
  212.         newImageComponent = new ImageComponent2D(ImageComponent.FORMAT_RGB, 
  213.                         bImage);
  214.     drawRaster.setImage(newImageComponent);
  215.     super.processStimulus(criteria);
  216.     }
  217. }
  218.