/* 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 java.util.*;
import java.io.*;import com.sun.j3d.loaders.objectfile.ObjectFile;
import com.sun.j3d.utils.geometry.Sphere;import java.awt.event.*;
public class Mykeynavbeh extends Frame implements KeyListener {
private SimpleUniverse universe = null; private Canvas3D canvas = null; private TransformGroup viewtrans = null;
private TransformGroup tg_x = null; private Transform3D t3d_x = null;
private TransformGroup tg_y = null; private Transform3D t3d_y = null;
private Transform3D t3dstep = new Transform3D(); private Matrix4d matrix = new Matrix4d(); private Switch selector = new Switch(Switch.CHILD_MASK); private BitSet flag_i = new BitSet(2); private int count = 0;
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(10000.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);
BranchGroup bg = new BranchGroup(); bg.addChild(keyNavBeh); universe.addBranchGraph(bg);
objRoot.addChild(createPlanetarium());
return objRoot; }
private BranchGroup createPlanetarium() {
BranchGroup objRoot = new BranchGroup();
tg_x = new TransformGroup(); t3d_x = new Transform3D(); tg_x.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
t3d_x.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_x.setScale(250.0); tg_x.setTransform(t3d_x);
tg_y = new TransformGroup(); t3d_y = new Transform3D(); tg_y.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
tg_y.addChild(createPlanetarium2());
tg_x.addChild(tg_y); objRoot.addChild(tg_x);
objRoot.compile();
return objRoot;
} private BranchGroup createPlanetarium2() {
BranchGroup objRoot = new BranchGroup();
selector.setCapability(Switch.ALLOW_SWITCH_WRITE);
flag_i.clear(); flag_i.set(0); selector.setChildMask(flag_i);
selector.addChild(createObjLoad("model/CelestialSphere_nasa.obj")); selector.addChild(createObjLoad("model/CelestialSphere_nasa2.obj"));
objRoot.addChild(selector);
objRoot.compile();
return objRoot;
}
private BranchGroup createObjLoad(String filename) {
BranchGroup objRoot = new BranchGroup();
TransformGroup tg = new TransformGroup(); Transform3D t3d = new Transform3D(); t3d.setScale(1.0); 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.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 == 's') {
t3dstep.rotY(-Math.PI / 32); tg_y.getTransform(t3d_y); t3d_y.get(matrix); t3d_y.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_y.mul(t3dstep); t3d_y.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_y.setTransform(t3d_y);
}
if (key == 'f') {
t3dstep.rotY(Math.PI / 32); tg_y.getTransform(t3d_y); t3d_y.get(matrix); t3d_y.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_y.mul(t3dstep); t3d_y.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_y.setTransform(t3d_y);
}
if (key == 'e') {
t3dstep.rotX(-Math.PI / 128); tg_x.getTransform(t3d_x); t3d_x.get(matrix); t3d_x.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_x.mul(t3dstep); t3d_x.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_x.setTransform(t3d_x);
}
if (key == 'c') {
t3dstep.rotX(Math.PI / 128); tg_x.getTransform(t3d_x); t3d_x.get(matrix); t3d_x.setTranslation(new Vector3d(0.0, 0.0, 0.0)); t3d_x.mul(t3dstep); t3d_x.setTranslation(new Vector3d(matrix.m03, matrix.m13, matrix.m23)); tg_x.setTransform(t3d_x);
} if (key == '@') { count++; System.out.println("@_count % 2: "+count % 2); flag_i.clear(); flag_i.set(count % 2); selector.setChildMask(flag_i); } }
public void keyReleased(KeyEvent e) { }
public void keyPressed(KeyEvent e) { }
}