/* 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 java.awt.event.*;
import java.util.*;import com.sun.j3d.utils.geometry.ColorCube;
import java.awt.event.KeyListener;import java.awt.event.KeyEvent;
public class Mykeynavbeh extends Frame implements KeyListener {
private SimpleUniverse universe = null; private Canvas3D canvas = null; private TransformGroup viewtrans = null; private TransformGroup tg_0 = null; private Transform3D t3d_0 = null; private TransformGroup tg = null; private Transform3D t3d = null; private TransformGroup tg_2 = null; private Transform3D t3d_2 = null; private TransformGroup tg_3 = null; private Transform3D t3d_3 = null; private TransformGroup tg_4 = null; private Transform3D t3d_4 = null; private Transform3D t3dstep = new Transform3D(); private Matrix4d matrix = new Matrix4d();
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);
objRoot.addChild(createColorCube());
return objRoot; }
private BranchGroup createColorCube() {
BranchGroup objRoot = new BranchGroup(); tg_0 = new TransformGroup(); t3d_0 = new Transform3D(); tg_0.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); t3d_0.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_0.setRotation(new AxisAngle4f(0.0f, 0.0f, 0.0f, 0.0f)); t3d_0.setScale(1.0); tg_0.setTransform(t3d_0); tg = new TransformGroup(); t3d = new Transform3D(); tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); t3d.setTranslation(new Vector3d(0.5, -0.3, -0.5)); t3d.setRotation(new AxisAngle4f(0.0f, 1.0f, 0.0f, 1.046f)); t3d.setScale(0.1); tg.setTransform(t3d); tg_2 = new TransformGroup(); t3d_2 = new Transform3D(); tg_2.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); t3d_2.setTranslation(new Vector3d(0.5, -0.3, 0.5)); t3d_2.setRotation(new AxisAngle4f(0.0f, 1.0f, 0.0f, 1.046f)); t3d_2.setScale(0.1); tg_2.setTransform(t3d_2); tg_3 = new TransformGroup(); t3d_3 = new Transform3D(); tg_3.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); t3d_3.setTranslation(new Vector3d(-0.5, -0.3, 0.5)); t3d_3.setRotation(new AxisAngle4f(0.0f, 1.0f, 0.0f, 1.046f)); t3d_3.setScale(0.1); tg_3.setTransform(t3d_3); tg_4 = new TransformGroup(); t3d_4 = new Transform3D();
tg_4.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); t3d_4.setTranslation(new Vector3d(-0.5, -0.3, -0.5)); t3d_4.setRotation(new AxisAngle4f(0.0f, 1.0f, 0.0f, 1.046f)); t3d_4.setScale(0.1); tg_4.setTransform(t3d_4);
tg.addChild(new ColorCube()); tg_2.addChild(new ColorCube()); tg_3.addChild(new ColorCube()); tg_4.addChild(new ColorCube());
tg_0.addChild(tg); tg_0.addChild(tg_2); tg_0.addChild(tg_3); tg_0.addChild(tg_4);
objRoot.addChild(tg_0);
objRoot.compile();
return objRoot;
}
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 keyTyped(KeyEvent e) { char key = e.getKeyChar(); if (key == 'D') { t3dstep.set(new Vector3d(0.0, 0.0, 0.1)); tg_0.getTransform(t3d_0); t3d_0.mul(t3dstep); tg_0.setTransform(t3d_0); } if (key == 'd') { t3dstep.set(new Vector3d(0.0, 0.0, 0.1)); tg.getTransform(t3d); t3d.mul(t3dstep); tg.setTransform(t3d); } if (key == '+') { t3dstep.set(1.1); tg_0.getTransform(t3d_0); t3d_0.get(matrix); t3d_0.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_0.mul(t3dstep); t3d_0.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_0.setTransform(t3d_0); }
if (key == '-') { t3dstep.set(0.9); tg_0.getTransform(t3d_0); t3d_0.get(matrix); t3d_0.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_0.mul(t3dstep); t3d_0.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_0.setTransform(t3d_0); } if (key == '*') { t3dstep.set(1.1); tg.getTransform(t3d); t3d.get(matrix); t3d.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d.mul(t3dstep); t3d.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg.setTransform(t3d); }
if (key == '^') { t3dstep.set(0.9); tg.getTransform(t3d); t3d.get(matrix); t3d.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d.mul(t3dstep); t3d.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg.setTransform(t3d); } if (key == 'W') {
t3dstep.rotX(Math.PI / 32); tg_0.getTransform(t3d_0); t3d_0.get(matrix); t3d_0.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_0.mul(t3dstep); t3d_0.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_0.setTransform(t3d_0);
}
if (key == 'R') {
t3dstep.rotX(-Math.PI / 32); tg_0.getTransform(t3d_0); t3d_0.get(matrix); t3d_0.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_0.mul(t3dstep); t3d_0.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_0.setTransform(t3d_0);
}
if (key == 'S') {
t3dstep.rotY(Math.PI / 32); tg_0.getTransform(t3d_0); t3d_0.get(matrix); t3d_0.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_0.mul(t3dstep); t3d_0.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_0.setTransform(t3d_0);
}
if (key == 'F') {
t3dstep.rotY(-Math.PI / 32); tg_0.getTransform(t3d_0); t3d_0.get(matrix); t3d_0.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_0.mul(t3dstep); t3d_0.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_0.setTransform(t3d_0);
} if (key == 'X') {
t3dstep.rotZ(Math.PI / 32); tg_0.getTransform(t3d_0); t3d_0.get(matrix); t3d_0.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_0.mul(t3dstep); t3d_0.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_0.setTransform(t3d_0);
}
if (key == 'V') {
t3dstep.rotZ(-Math.PI / 32); tg_0.getTransform(t3d_0); t3d_0.get(matrix); t3d_0.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_0.mul(t3dstep); t3d_0.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_0.setTransform(t3d_0);
} if (key == 'w') {
t3dstep.rotX(Math.PI / 32); tg.getTransform(t3d); t3d.get(matrix); t3d.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d.mul(t3dstep); t3d.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg.setTransform(t3d);
}
if (key == 'r') {
t3dstep.rotX(-Math.PI / 32); tg.getTransform(t3d); t3d.get(matrix); t3d.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d.mul(t3dstep); t3d.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg.setTransform(t3d);
} if (key == 's') {
t3dstep.rotY(Math.PI / 32); tg.getTransform(t3d); t3d.get(matrix); t3d.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d.mul(t3dstep); t3d.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg.setTransform(t3d);
}
if (key == 'f') {
t3dstep.rotY(-Math.PI / 32); tg.getTransform(t3d); t3d.get(matrix); t3d.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d.mul(t3dstep); t3d.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg.setTransform(t3d);
} if (key == 'x') {
t3dstep.rotZ(Math.PI / 32); tg.getTransform(t3d); t3d.get(matrix); t3d.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d.mul(t3dstep); t3d.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg.setTransform(t3d);
}
if (key == 'v') {
t3dstep.rotZ(-Math.PI / 32); tg.getTransform(t3d); t3d.get(matrix); t3d.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d.mul(t3dstep); t3d.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg.setTransform(t3d);
} if (key == 't') { t3dstep.rotX(Math.PI / 32); tg_2.getTransform(t3d_2); t3d_2.get(matrix); t3d_2.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_2.mul(t3dstep); t3d_2.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_2.setTransform(t3d_2);
}
if (key == 'y') {
t3dstep.rotX(-Math.PI / 32); tg_2.getTransform(t3d_2); t3d_2.get(matrix); t3d_2.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_2.mul(t3dstep); t3d_2.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_2.setTransform(t3d_2);
}
if (key == 'g') { t3dstep.rotY(Math.PI / 32); tg_2.getTransform(t3d_2); t3d_2.get(matrix); t3d_2.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_2.mul(t3dstep); t3d_2.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_2.setTransform(t3d_2);
}
if (key == 'h') {
t3dstep.rotY(-Math.PI / 32); tg_2.getTransform(t3d_2); t3d_2.get(matrix); t3d_2.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_2.mul(t3dstep); t3d_2.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_2.setTransform(t3d_2);
} if (key == 'b') { t3dstep.rotZ(Math.PI / 32); tg_2.getTransform(t3d_2); t3d_2.get(matrix); t3d_2.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_2.mul(t3dstep); t3d_2.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_2.setTransform(t3d_2);
}
if (key == 'n') {
t3dstep.rotZ(-Math.PI / 32); tg_2.getTransform(t3d_2); t3d_2.get(matrix); t3d_2.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_2.mul(t3dstep); t3d_2.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_2.setTransform(t3d_2);
} if (key == 'u') { t3dstep.rotX(Math.PI / 32); tg_3.getTransform(t3d_3); t3d_3.get(matrix); t3d_3.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_3.mul(t3dstep); t3d_3.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_3.setTransform(t3d_3);
}
if (key == 'i') {
t3dstep.rotX(-Math.PI / 32); tg_3.getTransform(t3d_3); t3d_3.get(matrix); t3d_3.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_3.mul(t3dstep); t3d_3.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_3.setTransform(t3d_3);
} if (key == 'j') { t3dstep.rotY(Math.PI / 32); tg_3.getTransform(t3d_3); t3d_3.get(matrix); t3d_3.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_3.mul(t3dstep); t3d_3.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_3.setTransform(t3d_3);
}
if (key == 'k') {
t3dstep.rotY(-Math.PI / 32); tg_3.getTransform(t3d_3); t3d_3.get(matrix); t3d_3.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_3.mul(t3dstep); t3d_3.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_3.setTransform(t3d_3);
} if (key == 'm') { t3dstep.rotZ(Math.PI / 32); tg_3.getTransform(t3d_3); t3d_3.get(matrix); t3d_3.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_3.mul(t3dstep); t3d_3.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_3.setTransform(t3d_3);
}
if (key == ',') {
t3dstep.rotZ(-Math.PI / 32); tg_3.getTransform(t3d_3); t3d_3.get(matrix); t3d_3.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_3.mul(t3dstep); t3d_3.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_3.setTransform(t3d_3);
} if (key == 'o') { t3dstep.rotX(Math.PI / 32); tg_4.getTransform(t3d_4); t3d_4.get(matrix); t3d_4.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_4.mul(t3dstep); t3d_4.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_4.setTransform(t3d_4);
}
if (key == 'p') {
t3dstep.rotX(-Math.PI / 32); tg_4.getTransform(t3d_4); t3d_4.get(matrix); t3d_4.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_4.mul(t3dstep); t3d_4.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_4.setTransform(t3d_4);
} if (key == 'l') { t3dstep.rotY(Math.PI / 32); tg_4.getTransform(t3d_4); t3d_4.get(matrix); t3d_4.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_4.mul(t3dstep); t3d_4.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_4.setTransform(t3d_4);
}
if (key == ';') {
t3dstep.rotY(-Math.PI / 32); tg_4.getTransform(t3d_4); t3d_4.get(matrix); t3d_4.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_4.mul(t3dstep); t3d_4.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_4.setTransform(t3d_4);
} if (key == '.') { t3dstep.rotZ(Math.PI / 32); tg_4.getTransform(t3d_4); t3d_4.get(matrix); t3d_4.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_4.mul(t3dstep); t3d_4.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_4.setTransform(t3d_4);
}
if (key == '/') {
t3dstep.rotZ(-Math.PI / 32); tg_4.getTransform(t3d_4); t3d_4.get(matrix); t3d_4.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_4.mul(t3dstep); t3d_4.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_4.setTransform(t3d_4);
} }
public void keyReleased(KeyEvent e) { }
public void keyPressed(KeyEvent e) { }}