206 lines
6.1 KiB
Java
206 lines
6.1 KiB
Java
|
|
/*
|
|
* @(#)HelloUniverse.java 1.15 02/02/07 14:48:36
|
|
*
|
|
* Copyright (c) 1996-2002 Sun Microsystems, Inc. All Rights Reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* - Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
*
|
|
* - Redistribution in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in
|
|
* the documentation and/or other materials provided with the
|
|
* distribution.
|
|
*
|
|
* Neither the name of Sun Microsystems, Inc. or the names of
|
|
* contributors may be used to endorse or promote products derived
|
|
* from this software without specific prior written permission.
|
|
*
|
|
* 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.
|
|
*
|
|
* You acknowledge that Software is not designed,licensed or intended
|
|
* for use in the design, construction, operation or maintenance of
|
|
* any nuclear facility.
|
|
*/
|
|
|
|
package de.hardcode.jxinput.j3d.test;
|
|
|
|
|
|
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.*;
|
|
import de.hardcode.jxinput.j3d.DeviceConfiguration;
|
|
import de.hardcode.jxinput.Axis;
|
|
import de.hardcode.jxinput.JXInputManager;
|
|
import de.hardcode.jxinput.j3d.IsActiveCondition;
|
|
import de.hardcode.jxinput.j3d.J3DInputDevice;
|
|
import de.hardcode.jxinput.j3d.IsActiveOnButtonCondition;
|
|
|
|
|
|
public class HelloUniverse extends Applet
|
|
{
|
|
|
|
private SimpleUniverse u = null;
|
|
TransformGroup objTrans;
|
|
|
|
public BranchGroup createSceneGraph()
|
|
{
|
|
BranchGroup objRoot = new BranchGroup();
|
|
objTrans = new TransformGroup();
|
|
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
|
|
objRoot.addChild(objTrans);
|
|
objTrans.addChild(new ColorCube(0.4));
|
|
|
|
// Transform3D yAxis = new Transform3D();
|
|
// Alpha rotationAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE,
|
|
// 0, 0,
|
|
// 4000, 0, 0,
|
|
// 0, 0, 0);
|
|
// RotationInterpolator rotator = new RotationInterpolator(rotationAlpha, objTrans, yAxis,
|
|
// 0.0f, (float) Math.PI*2.0f);
|
|
// BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
|
|
// rotator.setSchedulingBounds(bounds);
|
|
// objTrans.addChild(rotator);
|
|
return objRoot;
|
|
}
|
|
|
|
|
|
public HelloUniverse()
|
|
{
|
|
|
|
}
|
|
|
|
public void init()
|
|
{
|
|
// These are the string arguments given to the VirtualInputDevice
|
|
// constructor. These are settable parameters. Look in the
|
|
// VirtualInputDevice constructor for a complete list.
|
|
String[] args = new String[10];
|
|
args[0] = "printvalues";
|
|
args[1] = "true";
|
|
args[2] = "yscreeninitloc";
|
|
args[3] = "50";
|
|
args[4] = null;
|
|
|
|
|
|
// now create the HelloUniverse Canvas
|
|
setLayout(new BorderLayout());
|
|
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
|
|
|
|
Canvas3D c = new Canvas3D(config);
|
|
add("Center", c);
|
|
|
|
// Create a simple scene and attach it to the virtual universe
|
|
BranchGroup scene = createSceneGraph();
|
|
u = new SimpleUniverse(c);
|
|
|
|
//
|
|
// Use the inputdevice
|
|
//
|
|
InputDevice device = createInputDevice();
|
|
|
|
// Register the VirtualInputDevice with Java 3D
|
|
u.getViewer().getPhysicalEnvironment().addInputDevice( device );
|
|
|
|
// TransformGroup viewTrans = u.getViewingPlatform().getViewPlatformTransform();
|
|
|
|
// Put the behavoir to teh object
|
|
SensorBehavior s = new SensorBehavior( objTrans, device.getSensor(0) );
|
|
s.setSchedulingBounds( new BoundingSphere( new Point3d(0.0,0.0,0.0), Float.MAX_VALUE ) );
|
|
objTrans.addChild( s );
|
|
|
|
u.getViewingPlatform().setNominalViewingTransform();
|
|
u.addBranchGraph(scene);
|
|
}
|
|
|
|
public void destroy()
|
|
{
|
|
u.removeAllLocales();
|
|
}
|
|
|
|
|
|
/**
|
|
* Setup an input device.
|
|
*/
|
|
private InputDevice createInputDevice()
|
|
{
|
|
IsActiveCondition button1down = new IsActiveOnButtonCondition(JXInputManager.getJXInputDevice( 0 ).getButton( 0 ), true );
|
|
IsActiveCondition button1up = new IsActiveOnButtonCondition(JXInputManager.getJXInputDevice( 0 ).getButton( 0 ), false );
|
|
|
|
Axis xaxis = JXInputManager.getJXInputDevice( 0 ).getAxis( Axis.ID_X );
|
|
Axis yaxis = JXInputManager.getJXInputDevice( 0 ).getAxis( Axis.ID_Y );
|
|
|
|
DeviceConfiguration cnf = new DeviceConfiguration();
|
|
|
|
//
|
|
// Setup the configuration to use joysticks x/y for rotation is not button is pressed
|
|
// and for translation if button1 is pressed.
|
|
//
|
|
cnf.setRotational(
|
|
DeviceConfiguration.AXIS_Y,
|
|
xaxis,
|
|
button1up,
|
|
IsActiveCondition.NEVER,
|
|
0.0, Math.PI
|
|
);
|
|
|
|
cnf.setRotational(
|
|
DeviceConfiguration.AXIS_X,
|
|
yaxis,
|
|
button1up,
|
|
IsActiveCondition.NEVER,
|
|
0.0, Math.PI
|
|
);
|
|
|
|
cnf.setTranslational(
|
|
DeviceConfiguration.AXIS_Z,
|
|
yaxis,
|
|
button1down,
|
|
IsActiveCondition.NEVER,
|
|
-5.0, 4.0
|
|
);
|
|
cnf.setTranslational(
|
|
DeviceConfiguration.AXIS_X,
|
|
xaxis,
|
|
button1down,
|
|
IsActiveCondition.NEVER,
|
|
0.0, 4.0
|
|
);
|
|
|
|
// We have the config, create the device...
|
|
J3DInputDevice d = new J3DInputDevice( cnf );
|
|
|
|
// The InputDevice must be initialized before registering it
|
|
// with the PhysicalEnvironment object.
|
|
d.initialize();
|
|
|
|
return d;
|
|
}
|
|
|
|
|
|
public static void main(String[] args)
|
|
{
|
|
new MainFrame(new HelloUniverse(), 350, 350);
|
|
}
|
|
}
|