⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 supermaninterp.java

📁 这个就是目前我收集,以及自己写的一些java3d的原码,大部分都可以运行,适合和我一样,刚刚开始对java3D心动的菜鸟
💻 JAVA
字号:
package com.java3d.test;
/*
*
* Copyright (c) 1996-2001 Sun Microsystems, Inc. All Rights Reserved.
*
* Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
* modify and redistribute this software in source and binary code form,
* provided that i) this copyright notice and license appear on all copies of
* the software; and ii) Licensee does not utilize the software in a manner
* which is disparaging to Sun.
*
* This software is provided "AS IS," without a warranty of any kind. ALL
* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
* IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
* NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
* LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
* OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
* LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
* INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
* CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
* OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*
* This software is not designed or intended for use in on-line control of
* aircraft, air traffic, aircraft navigation or aircraft communications; or in
* the design, construction, operation or maintenance of any nuclear
* facility. Licensee represents and warrants that it will not use or
* redistribute the Software for such purposes.
*/

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.awt.*;
import java.awt.GraphicsConfiguration;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.image.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.behaviors.vp.*;



/**
  Rotation Interpolator example

  Very similar to texture mapping example, but 
  attaches an Interpolator above geometry that
  keeps the world spinning. Play with Alpha timing,
  you can have it slowly ease to a halt by using
  some of the other parameters that aren't in this
  simple example. It will also reverse direction.


*/


public class SupermanInterp extends Applet {

   private SimpleUniverse universe ;
   private BranchGroup scene;
   private Canvas3D canvas;
   private BoundingSphere bounds =
           new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 1000.0);
   
   

   public Primitive  createGeometry(int filter,  java.net.URL texImage, Appearance appearance) {
       /** 
       Create Sphere and texture it
       */


       TextureLoader tex = 
           new TextureLoader(texImage, TextureLoader.GENERATE_MIPMAP , this);
       Texture texture = tex.getTexture();
       texture.setMinFilter(filter) ;
       appearance.setTexture(texture);


       TextureAttributes texAttr = new TextureAttributes();
       texAttr.setTextureMode(TextureAttributes.MODULATE);
       appearance.setTextureAttributes(texAttr);


       Color3f black = new Color3f(0.0f, 0.0f, 0.0f);
       Color3f white = new Color3f(1.0f, 1.0f, 1.0f);

       // Set up the material properties
       appearance.setMaterial(new Material(white, black, white, black, 1.0f));

       Sphere sphere = 
           new Sphere(.4f,Primitive.GENERATE_NORMALS|
                          Primitive.GENERATE_TEXTURE_COORDS,appearance);

       return sphere;
   }

   public void setupView() {
       /** Add some view related things to view branch side 
       of scene graph */
       // add mouse interaction to the ViewingPlatform
       OrbitBehavior orbit = new OrbitBehavior(canvas,
               OrbitBehavior.REVERSE_ALL|OrbitBehavior.STOP_ZOOM);
       orbit.setSchedulingBounds(bounds);
       
       ViewingPlatform viewingPlatform = universe.getViewingPlatform();
       // This will move the ViewPlatform back a bit so the
       // objects in the scene can be viewed.
       viewingPlatform.setNominalViewingTransform();
       viewingPlatform.setViewPlatformBehavior(orbit);

       }

   public BranchGroup createSceneGraph() {
       // Create the root of the branch graph
       BranchGroup objRoot = new BranchGroup();

       // Create a simple Shape3D node; add it to the scene graph.
       // Set up the texture map
       java.net.URL texImage = null;
       // the path to the image
       try {
           texImage = new java.net.URL("file:../images/earth.jpg");
       }
       catch (java.net.MalformedURLException ex) {
           System.out.println(ex.getMessage());
           System.exit(1);
       }

       Appearance app= new Appearance();
       Primitive geo = createGeometry( Texture.MULTI_LEVEL_LINEAR,texImage,app);
       
       //spinGroup will be hooked into the interpolator
       TransformGroup spinGroup = new TransformGroup();
       spinGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
       spinGroup.addChild(geo);

       // Create a new Behavior object that will perform the
       // desired operation on the specified transform and add
       // it into the scene graph.

       //OLD:  straight constant spin 
       //      Alpha rotationAlpha = new Alpha(-1, 4000);
       //NEW:  accelerate one direction, stop, rotate opposite direction
       Alpha rotationAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE |
                                       Alpha.DECREASING_ENABLE,
                                       0, 0,
                                       5000, 2500, 200,
                                       5000, 2500, 200);

       RotationInterpolator rotator =
           new RotationInterpolator(rotationAlpha, spinGroup);
       rotator.setSchedulingBounds(bounds);

       //throw in some light so we aren't stumbling 
       //around in the dark
       Color3f lightColor = new Color3f(.5f,.5f,.5f);
       AmbientLight ambientLight= new AmbientLight(lightColor);
       ambientLight.setInfluencingBounds(bounds);
       DirectionalLight directionalLight = new DirectionalLight();
       directionalLight.setColor(lightColor);
       directionalLight.setInfluencingBounds(bounds);

       objRoot.addChild(rotator); //behavior gets attached at the top
       objRoot.addChild(spinGroup); //TransformGroup and sphere
       objRoot.addChild(directionalLight);
       objRoot.addChild(ambientLight);

       return objRoot;

   }

   public SupermanInterp() {
   }

   public void init() {
       BranchGroup scene = createSceneGraph();

       setLayout(new BorderLayout());
       GraphicsConfiguration config =
          SimpleUniverse.getPreferredConfiguration();
       canvas = new Canvas3D(config);
       add("Center", canvas);

       // Create a simple scene and attach it to the virtual universe
       universe = new SimpleUniverse(canvas);
       setupView();

       universe.addBranchGraph(scene);
   }

   public void destroy() {
       universe.removeAllLocales();
   }

   //
   // The following allows SupermanInterp to be run as an application
   // as well as an applet
   //
   public static void main(String[] args) {
       new MainFrame(new SupermanInterp(), 256, 256);
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -