next up previous
Next: 6.10.2 衝突検知処理 Up: 6.10 TickTockCollision Previous: 6.10 TickTockCollision

6.10.1 TickTockCollision.java

/*
 *@(#)TickTockCollision.java 1.16 02/10/21 13:58:00
 * Copyright (c) 1996-2002 Sun Microsystems
 */
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;

public class TickTockCollision extends Applet {
  private SimpleUniverse u = null;
  public BranchGroup createSceneGraph() {
    BranchGroup objRoot = new BranchGroup();
    TransformGroup objScale =
      new TransformGroup();
    Transform3D t3d = new Transform3D();
    t3d.setScale(0.4);
    objScale.setTransform(t3d);
    objRoot.addChild(objScale);
    BoundingSphere bounds =
      new BoundingSphere(
        new Point3d(0.0,0.0,0.0), 100.0);
    Color3f bgColor = new Color3f(0.05f, 0.05f, 0.2f);
    Background bg = new Background(bgColor);
    bg.setApplicationBounds(bounds);
    objScale.addChild(bg);
    TransformGroup objTrans1 =
      new TransformGroup();
    objTrans1.setCapability(
      TransformGroup.ALLOW_TRANSFORM_WRITE);
    objScale.addChild(objTrans1);

    TransformGroup objTrans2 =
      new TransformGroup();
    objTrans2.setCapability(
      TransformGroup.ALLOW_TRANSFORM_WRITE);
    objTrans1.addChild(objTrans2);

    Transform3D t = new Transform3D();
    t.set(0.3, new Vector3d(0.0, -1.5, 0.0));
    TransformGroup objTrans3 =
      new TransformGroup(t);
    objTrans2.addChild(objTrans3);
    objTrans3.addChild(new ColorCube());
    Transform3D yAxis1 = new Transform3D();
    yAxis1.rotX(Math.PI/2.0);
    Alpha tickTockAlpha =
      new Alpha(-1, Alpha.INCREASING_ENABLE |
                Alpha.DECREASING_ENABLE,
                0, 0,
                5000, 2500, 200,
                5000, 2500, 200);
    RotationInterpolator tickTock =
      new RotationInterpolator(
        tickTockAlpha, objTrans1, yAxis1,
        -(float) Math.PI/2.0f,
        (float) Math.PI/2.0f);
    tickTock.setSchedulingBounds(bounds);
    objTrans2.addChild(tickTock);
    Transform3D yAxis2 =
      new Transform3D();
    Alpha rotationAlpha =
      new Alpha(-1, Alpha.INCREASING_ENABLE,
                0, 0,
                4000, 0, 0,
                0, 0, 0);
    
    RotationInterpolator rotator =
      new RotationInterpolator(
          rotationAlpha, objTrans2, yAxis2,
          0.0f, (float) Math.PI*2.0f);
    rotator.setSchedulingBounds(bounds);
    objTrans2.addChild(rotator);
    Group box1 =
      createBox(0.3, new Vector3d(-1.3, 0.0, 0.0));
    Group box2 =
      createBox(0.3, new Vector3d( 1.3, 0.0, 0.0));

    objScale.addChild(box1);
    objScale.addChild(box2);
    objRoot.compile();
    return objRoot;
  }
  private Group createBox(double scale,
                         Vector3d pos) {
    Transform3D t = new Transform3D();
    t.set(scale, pos);
    TransformGroup objTrans =
      new TransformGroup(t);
    Shape3D shape = new Box(0.5, 5.0, 1.0);
    objTrans.addChild(shape);
    Appearance app = shape.getAppearance();
    ColoringAttributes ca =
      new ColoringAttributes();
    ca.setColor(0.6f, 0.3f, 0.0f);
    app.setCapability(
       app.ALLOW_COLORING_ATTRIBUTES_WRITE);
    app.setColoringAttributes(ca);
    CollisionDetector cd =
      new CollisionDetector(shape);
    BoundingSphere bounds =
      new BoundingSphere(
          new Point3d(0.0,0.0,0.0), 100.0);
    cd.setSchedulingBounds(bounds);
    objTrans.addChild(cd);
    return objTrans;
  }
  public TickTockCollision() {
  }
  public void init() {
    setLayout(new BorderLayout());
    GraphicsConfiguration config =
      SimpleUniverse.
        getPreferredConfiguration();
    Canvas3D c = new Canvas3D(config);
    add("Center", c);
    BranchGroup scene = createSceneGraph();
    u = new SimpleUniverse(c);
    u.getViewingPlatform().
        setNominalViewingTransform();
    u.addBranchGraph(scene);
  }
  public void destroy() {
    u.cleanup();
  }
  public static
  void main(String[] args) {
    new MainFrame(new TickTockCollision(),
                  700, 700);
  }
}


generated through LaTeX2HTML. M.Inaba 平成18年5月7日