Next: 6.10.2 衝突検知処理
Up: 6.10 TickTockCollision
Previous: 6.10 TickTockCollision
/*
*@(#)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日