/* Mykeynavbeh.java * Originally based on code from BackgroundApp.java * @(#)BackgroundApp.java 1.1 00/09/22 14:03 * * portions Copyright (c) 1996-2000 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.awt.*;
import javax.media.j3d.*;import javax.vecmath.*;
import com.sun.j3d.utils.universe.SimpleUniverse;import com.sun.j3d.utils.universe.PlatformGeometry;import com.sun.j3d.utils.behaviors.keyboard.*;
import com.sun.j3d.loaders.Scene;
import java.awt.event.KeyListener;import java.awt.event.KeyEvent;
import com.sun.j3d.utils.image.TextureLoader;import com.sun.j3d.utils.geometry.Text2D;
import java.util.*;
import javax.media.j3d.WakeupCriterion;import javax.media.j3d.WakeupOnCollisionEntry;import javax.media.j3d.WakeupOnCollisionExit;import javax.media.j3d.WakeupOnCollisionMovement;import javax.media.j3d.WakeupOr;
import com.sun.j3d.loaders.objectfile.ObjectFile;import java.io.*;
import java.awt.event.*;
import java.text.SimpleDateFormat;
public class Mykeynavbeh extends Frame implements Runnable, KeyListener {
private SimpleUniverse universe = null; private Canvas3D canvas = null; private TransformGroup viewtrans = null; private Transform3D t3d_vt = new Transform3D();
private Transform3D t3dstep = new Transform3D(); private Matrix4d matrix = new Matrix4d();
private MovingKart kart = null; private DisplayElapsedTime elapsedTime = null;
private float speed = -0.05f; private boolean cstate = false;
private String colOrder = "0"; private String colNum = "0";
private Text2D text2d; private Text2D text2d_2;
private boolean gameOver = false; private boolean completed = false; private int pre_key = 0;
private int s_f_key_count = 0;
private Thread thread = new Thread(this);
public Mykeynavbeh() { setLayout(new BorderLayout()); GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
canvas = new Canvas3D(config); add("Center", canvas); universe = new SimpleUniverse(canvas);
BranchGroup scene = createSceneGraph(); universe.getViewingPlatform().setNominalViewingTransform();
universe.getViewer().getView().setBackClipDistance(100.0);
canvas.addKeyListener(this);
universe.addBranchGraph(scene); }
private BranchGroup createSceneGraph() { BranchGroup objRoot = new BranchGroup();
BoundingSphere bounds = new BoundingSphere(new Point3d(), 10000.0);
viewtrans = universe.getViewingPlatform().getViewPlatformTransform();
KeyNavigatorBehavior keyNavBeh = new KeyNavigatorBehavior(viewtrans); keyNavBeh.setSchedulingBounds(bounds); PlatformGeometry platformGeom = new PlatformGeometry(); platformGeom.addChild(keyNavBeh); universe.getViewingPlatform().setPlatformGeometry(platformGeom);
viewtrans.addChild(createKart()); viewtrans.addChild(createText2D()); objRoot.addChild(displayElapsedTime()); objRoot.addChild(createGround());
objRoot.addChild(createCheckpoint_OrientedShape3D(17.0f, -1.6, 3.48, 1, "model/checkpoint1.png")); objRoot.addChild(createCheckpoint_OrientedShape3D(17.0f, -1.6, -28.3, 2, "model/checkpoint2.png")); objRoot.addChild(createCheckpoint_OrientedShape3D(-17.0f, -1.6, -28.3, 3, "model/checkpoint3.png")); objRoot.addChild(createCheckpoint_OrientedShape3D(-17.0f, -1.6, 3.48, 4, "model/checkpoint4.png"));
Background background = new Background(); background.setColor(0.9f, 1.0f, 0.9f); background.setApplicationBounds(bounds); objRoot.addChild(background);
return objRoot; }
private BranchGroup createKart() {
BranchGroup objRoot = new BranchGroup(); TransformGroup tg = new TransformGroup();
TransformGroup tg_kart = new TransformGroup(); Transform3D t3d_kart = new Transform3D();
t3d_kart.setTranslation(new Vector3d(0.0, 0.0, -4.5)); t3d_kart.setRotation(new AxisAngle4f(0.0f, 0.0f, 0.0f, 0.0f)); t3d_kart.setScale(1.0);
tg_kart.setTransform(t3d_kart);
kart = new MovingKart("model/Kart3_flip.obj", "model/Pomeranian_drive2.obj"); tg_kart.addChild(kart.tg); tg_kart.addChild(kart);
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 1000.0);
CollisionDetectorGroup cdGroup = new CollisionDetectorGroup(kart.tg); cdGroup.setSchedulingBounds(bounds);
tg.addChild(tg_kart); tg.addChild(cdGroup);
objRoot.addChild(tg); objRoot.addChild(createLight());
objRoot.compile();
return objRoot;
}
private BranchGroup createCheckpoint_OrientedShape3D(double x, double y, double z, int n, String filename) {
BranchGroup objRoot = new BranchGroup(); TransformGroup tg = new TransformGroup(); Transform3D t3d = new Transform3D();
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
t3d.setTranslation(new Vector3d(x, y, z));
tg.setTransform(t3d);
tg.addChild(createOrientedShape3D_0(n)); tg.addChild(createCheckPoint(2.3f, 1.0f, filename));
objRoot.addChild(tg);
objRoot.compile();
return objRoot;
}
private BranchGroup createOrientedShape3D_0(int n) {
BranchGroup objRoot = new BranchGroup(); TransformGroup tg = new TransformGroup(); Transform3D t3d = new Transform3D();
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
t3d.setScale(10.0);
tg.setTransform(t3d);
tg.addChild(createOrientedShape3D(0.343f, 0.1f, "model/transparent.png", n));
objRoot.addChild(tg);
objRoot.compile();
return objRoot;
}
public BranchGroup createOrientedShape3D(float y, float size, String filename, int num) {
BranchGroup root = new BranchGroup(); TransformGroup tg = new TransformGroup(); Transform3D t3d = new Transform3D();
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
t3d.setTranslation(new Vector3d(0.0, y, 0.0)); t3d.setScale(1.0); tg.setTransform(t3d);
Appearance app = new Appearance();
TransparencyAttributes ta = new TransparencyAttributes(); ta.setTransparencyMode(ta.BLENDED); app.setTransparencyAttributes(ta);
TextureLoader loader = new TextureLoader(filename, this); app.setTexture(loader.getTexture());
QuadArray plane = new QuadArray(4, GeometryArray.COORDINATES | GeometryArray.TEXTURE_COORDINATE_2);
Point3f[] p = new Point3f[4]; p[0] = new Point3f(size, size, 0.0f); p[1] = new Point3f(-size, size, 0.0f); p[2] = new Point3f(-size, -size, 0.0f); p[3] = new Point3f(size, -size, 0.0f); plane.setCoordinates(0, p);
TexCoord2f[] q = new TexCoord2f[4]; q[0] = new TexCoord2f(1.0f, 1.0f); q[1] = new TexCoord2f(0.0f, 1.0f); q[2] = new TexCoord2f(0.0f, 0.0f); q[3] = new TexCoord2f(1.0f, 0.0f); plane.setTextureCoordinates(0, 0, q);
if (num == 1) { OrientedShape3D oriShape1 = new OrientedShape3D(plane, app, 0, new Point3f(0.0f, 0.0f, 0.0f)); tg.addChild(oriShape1); oriShape1.setUserData(new String("1")); } else if (num == 2) { OrientedShape3D oriShape2 = new OrientedShape3D(plane, app, 0, new Point3f(0.0f, 0.0f, 0.0f)); tg.addChild(oriShape2); oriShape2.setUserData(new String("2")); } else if (num == 3) { OrientedShape3D oriShape3 = new OrientedShape3D(plane, app, 0, new Point3f(0.0f, 0.0f, 0.0f)); tg.addChild(oriShape3); oriShape3.setUserData(new String("3")); } else if (num == 4) { OrientedShape3D oriShape4 = new OrientedShape3D(plane, app, 0, new Point3f(0.0f, 0.0f, 0.0f)); tg.addChild(oriShape4); oriShape4.setUserData(new String("4")); }
root.addChild(tg);
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0);
Color3f light1Color = new Color3f(0.6f, 0.3f, 0.3f); Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);
DirectionalLight light1 = new DirectionalLight(light1Color, light1Direction); light1.setInfluencingBounds(bounds); root.addChild(light1);
root.compile();
return root; }
private BranchGroup displayElapsedTime() {
BranchGroup objRoot = new BranchGroup(); TransformGroup tg = new TransformGroup(); Transform3D t3d = new Transform3D();
t3d.setTranslation(new Vector3d(0.0, -0.0, -0.0)); t3d.setRotation(new AxisAngle4f(0.0f, 0.0f, 0.0f, 0.0f)); t3d.setScale(6.0);
tg.setTransform(t3d);
elapsedTime = new DisplayElapsedTime(); tg.addChild(elapsedTime);
objRoot.addChild(tg); objRoot.compile();
return objRoot;
}
private BranchGroup createGround() {
BranchGroup objRoot = new BranchGroup();
TransformGroup tg = new TransformGroup(); Transform3D t3d = new Transform3D();
t3d.setTranslation(new Vector3d(0.0, -0.26, -18.6)); t3d.setScale(31.2); tg.setTransform(t3d); tg.setCollidable(false);
tg.addChild(createObjLoad("model/textured_ground.obj")); objRoot.addChild(tg); objRoot.compile();
return objRoot;
}
public BranchGroup createCheckPoint(float y, float size, String filename) {
BranchGroup root = new BranchGroup(); TransformGroup tg = new TransformGroup(); Transform3D t3d = new Transform3D(); t3d.setTranslation(new Vector3d(0.0f, y, 0.0f)); tg.setTransform(t3d);
Appearance app = new Appearance();
TransparencyAttributes ta = new TransparencyAttributes(); ta.setTransparencyMode(ta.BLENDED); app.setTransparencyAttributes(ta);
TextureLoader loader = new TextureLoader(filename, this); app.setTexture(loader.getTexture());
QuadArray plane = new QuadArray(4, GeometryArray.COORDINATES | GeometryArray.TEXTURE_COORDINATE_2);
Point3f[] p = new Point3f[4]; p[0] = new Point3f(size, size, 0.0f); p[1] = new Point3f(-size, size, 0.0f); p[2] = new Point3f(-size, -size, 0.0f); p[3] = new Point3f(size, -size, 0.0f); plane.setCoordinates(0, p);
TexCoord2f[] q = new TexCoord2f[4]; q[0] = new TexCoord2f(1.0f, 1.0f); q[1] = new TexCoord2f(0.0f, 1.0f); q[2] = new TexCoord2f(0.0f, 0.0f); q[3] = new TexCoord2f(1.0f, 0.0f); plane.setTextureCoordinates(0, 0, q);
OrientedShape3D oriShape = new OrientedShape3D(plane, app, 0, new Point3f(0.0f, 0.0f, 0.0f));
oriShape.setCollidable(false);
tg.addChild(oriShape); root.addChild(tg);
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0);
root.compile();
return root; }
private BranchGroup createText2D() {
BranchGroup objRoot = new BranchGroup();
TransformGroup tg = new TransformGroup(); Transform3D t3d = new Transform3D(); tg.setCollidable(false);
TransformGroup tg_2 = new TransformGroup(); Transform3D t3d_2 = new Transform3D(); tg_2.setCollidable(false);
t3d.setTranslation(new Vector3d(-1.8, 0.8, -4.5)); t3d.setRotation(new AxisAngle4f(0.0f, 0.0f, 0.0f, 0.0f)); t3d.setScale(2.0); tg.setTransform(t3d);
t3d_2.setTranslation(new Vector3d(0.8, 0.8, -4.5)); t3d_2.setRotation(new AxisAngle4f(0.0f, 0.0f, 0.0f, 0.0f)); t3d_2.setScale(2.0); tg_2.setTransform(t3d_2);
text2d = new Text2D("", new Color3f(1.0f, 0.0f, 0.0f), "Helvetica", 24, Font.ITALIC); text2d_2 = new Text2D("", new Color3f(0.0f, 0.0f, 0.8f), "Helvetica", 28, Font.ITALIC);
tg.addChild(text2d); tg_2.addChild(text2d_2); objRoot.addChild(tg); objRoot.addChild(tg_2);
objRoot.compile();
return objRoot;
}
private BranchGroup createObjLoad(String filename) {
BranchGroup objRoot = new BranchGroup();
TransformGroup tg = new TransformGroup(); Transform3D t3d = new Transform3D(); t3d.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d.setScale(1.0); tg.setTransform(t3d);
ObjectFile loader = new ObjectFile(ObjectFile.RESIZE); Scene s = null;
File file = new java.io.File(filename);
try { s = loader.load(file.toURI().toURL()); } catch (Exception e) { System.err.println(e); System.exit(1); }
tg.addChild(s.getSceneGroup());
objRoot.addChild(tg);
objRoot.compile();
return objRoot;
}
private BranchGroup createObjLoad(String filename, double y, double z, double scale) {
BranchGroup objRoot = new BranchGroup();
TransformGroup tg = new TransformGroup(); Transform3D t3d = new Transform3D(); t3d.setTranslation(new Vector3d(0.0, y, z)); t3d.setScale(scale); tg.setTransform(t3d);
ObjectFile loader = new ObjectFile(ObjectFile.RESIZE); Scene s = null;
File file = new java.io.File(filename);
try { s = loader.load(file.toURI().toURL()); } catch (Exception e) { System.err.println(e); System.exit(1); }
tg.addChild(s.getSceneGroup());
objRoot.addChild(tg);
objRoot.compile();
return objRoot;
}
private Light createLight() { DirectionalLight light = new DirectionalLight(true, new Color3f(1.0f, 1.0f, 1.0f), new Vector3f(-0.3f, 0.2f, -1.0f));
light.setInfluencingBounds(new BoundingSphere(new Point3d(), 10000.0));
return light; }
public static void main(String args[]) {
Mykeynavbeh window = new Mykeynavbeh();
window.setSize(800, 600);
window.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } });
window.setVisible(true); }
public void run() { }
public void keyTyped(KeyEvent e) { char key = e.getKeyChar();
if (key == 'd') { speed = -0.08f;
cstate = true; kart.setEnable(cstate); }
if (key == 's') {
if (pre_key == 2) { while (s_f_key_count > 0) { t3dstep.rotY(Math.PI / 512); kart.tg.getTransform(kart.t3d); kart.t3d.get(matrix); kart.t3d.setTranslation(new Vector3d(0.0, 0.0, 0.0)); kart.t3d.mul(t3dstep); kart.t3d.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); kart.tg.setTransform(kart.t3d);
try { thread.sleep(10); } catch (InterruptedException ae) { }
s_f_key_count--;
}
}
t3dstep.rotY(Math.PI / 32); viewtrans.getTransform(t3d_vt); t3d_vt.get(matrix); t3d_vt.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_vt.mul(t3dstep); t3d_vt.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); viewtrans.setTransform(t3d_vt);
t3dstep.rotY(Math.PI / 512); kart.tg.getTransform(kart.t3d); kart.t3d.get(matrix); kart.t3d.setTranslation(new Vector3d(0.0, 0.0, 0.0)); kart.t3d.mul(t3dstep); kart.t3d.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); kart.tg.setTransform(kart.t3d);
s_f_key_count++;
pre_key = 1;
}
if (key == 'f') {
if (pre_key == 1) { while (s_f_key_count > 0) { t3dstep.rotY(-Math.PI / 512); kart.tg.getTransform(kart.t3d); kart.t3d.get(matrix); kart.t3d.setTranslation(new Vector3d(0.0, 0.0, 0.0)); kart.t3d.mul(t3dstep); kart.t3d.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); kart.tg.setTransform(kart.t3d);
try { thread.sleep(10); } catch (InterruptedException ae) { }
s_f_key_count--;
}
}
t3dstep.rotY(-Math.PI / 32); viewtrans.getTransform(t3d_vt); t3d_vt.get(matrix); t3d_vt.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_vt.mul(t3dstep); t3d_vt.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); viewtrans.setTransform(t3d_vt);
t3dstep.rotY(-Math.PI / 512); kart.tg.getTransform(kart.t3d); kart.t3d.get(matrix); kart.t3d.setTranslation(new Vector3d(0.0, 0.0, 0.0)); kart.t3d.mul(t3dstep); kart.t3d.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); kart.tg.setTransform(kart.t3d);
s_f_key_count++;
pre_key = 2;
}
if (key == 'e') { speed -= 0.01f; System.out.println("speed: " + speed); }
if (key == 'x') { cstate = false; kart.setEnable(cstate); }
}
public void keyReleased(KeyEvent e) { }
public void keyPressed(KeyEvent e) { }
class DisplayElapsedTime extends Behavior {
public TransformGroup tg = null; public Transform3D t3d = null;
private WakeupOnElapsedFrames wakeFrame = null;
private long start;
private long delay; private boolean firstTime = true;
private long current; private long elapsed;
public DisplayElapsedTime() {
tg = new TransformGroup(); t3d = new Transform3D();
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
t3d.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d.setRotation(new AxisAngle4f(0.0f, 0.0f, 0.0f, 0.0f)); t3d.setScale(1.0);
tg.setTransform(t3d);
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 10000.0); this.setSchedulingBounds(bounds);
start = System.currentTimeMillis();
}
public void initialize() { wakeFrame = new WakeupOnElapsedFrames(0); wakeupOn(wakeFrame); }
public void processStimulus(Enumeration criteria) {
if (elapsed < 60000 * 3) { if (!completed) { if (!gameOver) { current = System.currentTimeMillis(); if (firstTime) { delay = current - start; firstTime = false; } elapsed = current - start - delay;
SimpleDateFormat format = new SimpleDateFormat("mm:ss"); String str = format.format(elapsed);
text2d_2.setString(str);
if (colOrder.equals("01")) { text2d.setString("CHECKPOINT 1"); } if (colOrder.equals("012")) { text2d.setString("CHECKPOINT 2"); } if (colOrder.equals("0123")) { text2d.setString("CHECKPOINT 3"); } if (colOrder.equals("01234")) { text2d.setString("CHECKPOINT 4"); }
} else { text2d.setString("GAME OVER"); text2d_2.setString(""); }
} else { text2d.setString("COMPLETED"); } } else { text2d.setString("TIMEOUT"); text2d_2.setString(""); }
wakeupOn(wakeFrame);
} }
class CollisionDetectorGroup extends Behavior { private boolean inCollision = false; private Group group;
protected WakeupCriterion[] theCriteria; protected WakeupOr oredCriteria; private Node theLeaf;
public CollisionDetectorGroup(Group gp) { group = gp; inCollision = false;
}
public void initialize() { theCriteria = new WakeupCriterion[3]; theCriteria[0] = new WakeupOnCollisionEntry(group); theCriteria[1] = new WakeupOnCollisionExit(group); theCriteria[2] = new WakeupOnCollisionMovement(group); oredCriteria = new WakeupOr(theCriteria); wakeupOn(oredCriteria); }
public void processStimulus(Enumeration criteria) {
WakeupCriterion theCriterion = (WakeupCriterion) criteria.nextElement();
if (theCriterion instanceof WakeupOnCollisionEntry) { theLeaf = ((WakeupOnCollisionEntry) theCriterion).getTriggeringPath().getObject();
} else if (theCriterion instanceof WakeupOnCollisionExit) { theLeaf = ((WakeupOnCollisionExit) theCriterion).getTriggeringPath().getObject();
} else { theLeaf = ((WakeupOnCollisionMovement) theCriterion).getTriggeringPath().getObject();
}
inCollision = !inCollision; if (inCollision) { /* * kart.t3dstep.set(new Vector3d(0.0, 0.0, -speed * 20)); * kart.tg.getTransform(kart.t3d); kart.t3d.mul(kart.t3dstep); * kart.tg.setTransform(kart.t3d); * * cstate = false; kart.setEnable(cstate); */
wakeupOn(theCriteria[1]);
if ((theLeaf.getUserData()).equals("1")) { System.out.println("colliding with 1");
colNum = "1"; colOrder = colOrder + colNum; System.out.println("colOrder: " + colOrder);
if ((colOrder.equals("012341"))) { System.out.println("colOrder: " + colOrder); completed = true; } else if (!(colOrder.equals("01"))) { System.out.println("Game_over"); gameOver = true; }
} else if ((theLeaf.getUserData()).equals("2")) { System.out.println("colliding with 2"); colNum = "2"; colOrder = colOrder + colNum; System.out.println("colOrder: " + colOrder);
if (!(colOrder.equals("012"))) { System.out.println("Game_over"); gameOver = true; }
} else if ((theLeaf.getUserData()).equals("3")) { System.out.println("colliding with 3"); colNum = "3"; colOrder = colOrder + colNum; System.out.println("colOrder: " + colOrder);
if (!(colOrder.equals("0123"))) { System.out.println("Game_over"); gameOver = true; } } else if ((theLeaf.getUserData()).equals("4")) { System.out.println("colliding with 4"); colNum = "4"; colOrder = colOrder + colNum; System.out.println("colOrder: " + colOrder);
if (!(colOrder.equals("01234"))) { System.out.println("Game_over"); gameOver = true; } }
} else { wakeupOn(theCriteria[0]); } } }
class MovingKart extends Behavior {
public TransformGroup tg = null; public Transform3D t3d = null; private Transform3D t3dstep = new Transform3D(); private WakeupOnElapsedFrames wakeFrame = null;
public MovingKart(String filename1, String filename2) {
tg = new TransformGroup(); t3d = new Transform3D();
t3d.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d.setScale(1.0); tg.setTransform(t3d);
tg.addChild(createObjLoad(filename1)); tg.addChild(createObjLoad(filename2, 0.35, 0.090, 0.45f));
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 1000.0); this.setSchedulingBounds(bounds); }
public void initialize() { wakeFrame = new WakeupOnElapsedFrames(0); wakeupOn(wakeFrame); }
public void processStimulus(Enumeration criteria) { t3dstep.set(new Vector3d(0.0, 0.0, speed)); viewtrans.getTransform(t3d_vt); t3d_vt.mul(t3dstep); viewtrans.setTransform(t3d_vt);
wakeupOn(wakeFrame);
} }
}