/* 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.applet.*;import java.awt.*;
import javax.media.j3d.*;import javax.vecmath.*;
import com.sun.j3d.utils.applet.MainFrame;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 java.util.*;
import com.sun.j3d.utils.picking.*;import com.sun.j3d.utils.picking.behaviors.*;
import com.sun.j3d.loaders.objectfile.ObjectFile;import java.io.*;
public class Mykeynavbeh extends Applet implements KeyListener {
private SimpleUniverse universe = null; private Canvas3D canvas = null; private TransformGroup viewtrans = null;
private TransformGroup tg = null; private Transform3D t3d = null; private Transform3D t3dstep = new Transform3D();
private TransformGroup tg_2 = null; private Transform3D t3d_2 = null; private Transform3D t3dstep_2 = new Transform3D();
private TransformGroup tg_3 = null; private Transform3D t3d_3 = null; private Transform3D t3dstep_3 = 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);
canvas.addKeyListener(this);
BranchGroup scene = createSceneGraph(); universe.getViewingPlatform().setNominalViewingTransform();
universe.getViewer().getView().setBackClipDistance(100.0); 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(createPickMouse());
Background background = new Background(); background.setColor(1.0f, 1.0f, 0.9f); background.setApplicationBounds(bounds); objRoot.addChild(background);
return objRoot; }
private BranchGroup createPickMouse() {
BranchGroup objRoot = new BranchGroup();
BranchGroup objRoot_1 = new BranchGroup(); BranchGroup objRoot_2 = new BranchGroup(); BranchGroup objRoot_3 = new BranchGroup();
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 300f);
tg = new TransformGroup(); t3d = new Transform3D();
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); tg.setCapability(TransformGroup.ENABLE_PICK_REPORTING);
t3d.setTranslation(new Vector3d(-1.8, -1.1, -3.7)); t3d.setRotation(new AxisAngle4f(0.0f, 0.0f, 0.0f, 0.0f)); t3d.setScale(0.5);
tg.setTransform(t3d);
tg.addChild(createObjLoad("model/sofa4.obj"));
tg_2 = new TransformGroup(); t3d_2 = new Transform3D();
tg_2.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); tg_2.setCapability(TransformGroup.ENABLE_PICK_REPORTING);
t3d_2.setTranslation(new Vector3d(0.0, -0.83, -4.0)); t3d.setRotation(new AxisAngle4f(0.0f, 0.0f, 0.0f, 0.0f)); t3d_2.setScale(20.0);
tg_2.setTransform(t3d_2);
tg_2.addChild(createObjLoad("model/tableGnome.obj"));
tg_3 = new TransformGroup(); t3d_3 = new Transform3D();
tg_3.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); tg_3.setCapability(TransformGroup.ENABLE_PICK_REPORTING);
t3d_3.setTranslation(new Vector3d(1.8, -0.0, -4.0)); t3d_3.setRotation(new AxisAngle4f(0.0f, 1.0f, 0.0f, 1.57f)); t3d_3.setScale(1.4);
tg_3.setTransform(t3d_3);
tg_3.addChild(createObjLoad("model/AntelopeCanyonFrame.obj"));
PickZoomBehavior zoom = new PickZoomBehavior(objRoot_1, canvas, bounds); PickZoomBehavior zoom_2 = new PickZoomBehavior(objRoot_2, canvas, bounds); PickZoomBehavior zoom_3 = new PickZoomBehavior(objRoot_3, canvas, bounds); objRoot_1.addChild(zoom); objRoot_2.addChild(zoom_2); objRoot_3.addChild(zoom_3);
PickRotateBehavior rotate = new PickRotateBehavior(objRoot_1, canvas, bounds); PickRotateBehavior rotate_2 = new PickRotateBehavior(objRoot_2, canvas, bounds); PickRotateBehavior rotate_3 = new PickRotateBehavior(objRoot_3, canvas, bounds); objRoot_1.addChild(rotate); objRoot_2.addChild(rotate_2); objRoot_3.addChild(rotate_3);
PickTranslateBehavior translate = new PickTranslateBehavior(objRoot_1, canvas, bounds); PickTranslateBehavior translate_2 = new PickTranslateBehavior(objRoot_2, canvas, bounds); PickTranslateBehavior translate_3 = new PickTranslateBehavior(objRoot_3, canvas, bounds);
objRoot_1.addChild(translate); objRoot_2.addChild(translate_2); objRoot_3.addChild(translate_3);
TransformGroup tg_4 = new TransformGroup(); Transform3D t3d_4 = new Transform3D();
t3d_4.setTranslation(new Vector3d(-1.7, -1.1, -1.5)); t3d_4.setRotation(new AxisAngle4f(0.0f, 1.0f, 0.0f, 1.57f)); t3d_4.setScale(2.0);
tg_4.setTransform(t3d_4);
tg_4.addChild(createObjLoad("model/kleed_grieks.obj"));
TransformGroup tg_5 = new TransformGroup(); Transform3D t3d_5 = new Transform3D();
t3d_5.setTranslation(new Vector3d(-0.3, -0.4, -6.0)); t3d_5.setRotation(new AxisAngle4f(1.0f, 0.0f, 0.0f, -1.57f)); t3d_5.setScale(14.0);
tg_5.setTransform(t3d_5);
tg_5.addChild(createObjLoad("model/storeVenitien.obj"));
objRoot_1.addChild(tg); objRoot_2.addChild(tg_2); objRoot_3.addChild(tg_3);
objRoot.addChild(objRoot_1); objRoot.addChild(objRoot_2); objRoot.addChild(objRoot_3);
objRoot.addChild(tg_4); objRoot.addChild(tg_5);
objRoot.addChild(createLight());
objRoot.compile();
return objRoot;
}
private BranchGroup createObjLoad(String filename) {
BranchGroup objRoot = new BranchGroup();
TransformGroup tg = new TransformGroup(); Transform3D t3d = new Transform3D(); t3d.setScale(0.01); tg.setTransform(t3d);
ObjectFile loader = new ObjectFile(); 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.addChild(createLight());
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 applet = new Mykeynavbeh(); Frame frame = new MainFrame(applet, 800, 600); }
public void keyTyped(KeyEvent e) { char key = e.getKeyChar();
if (key == '1') {
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 == '2') {
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 == '3') {
t3dstep_2.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_2); t3d_2.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_2.setTransform(t3d_2);
}
if (key == '4') {
t3dstep_2.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_2); t3d_2.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_2.setTransform(t3d_2);
}
if (key == '5') {
t3dstep_3.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_3); t3d_3.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_3.setTransform(t3d_3);
}
if (key == '6') {
t3dstep_3.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_3); t3d_3.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_3.setTransform(t3d_3);
}
}
public void keyReleased(KeyEvent e) { }
public void keyPressed(KeyEvent e) { }
}