If you want to attach geometry to the viewing platform, you need to use PlatformGeometry. See the PlatformGeometry class and ViewingPlatform.setPlatformGeometry.
-Paul
Hi guys,
I'm pretty new to the Java3D stuff and I've encountered a very strange problem... I wanted to make a very simple application which moves a car around and the user can control it with the keyboard. I also wanted to position the viewpoint behind the car. I made my own Behavior class which reacts to the keyevents by updating the speed and the wheel angle of the car and it also stimulated by time intervals when it calculates the new position of the car. It's something like this:
class MyBehavior extends Behavior {
private TransformGroup target = null; private WakeupCondition criteria = null; private long dt = 50; private Vector3d defOrient = new Vector3d(1, 0, 0); //the default orientation of the car private double angle = 0; //the starting angle of the car to the X axis private Vector3d up = new Vector3d(0.0, 1.0, 0.0);
public MyBehavior(TransformGroup tg) { target = tg; WakeupCriterion[] wcarray = new WakeupCriterion[2]; wcarray[0] = new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED); wcarray[1] = new WakeupOnElapsedTime(dt); criteria = new WakeupOr(wcarray); }
public void initialize() { wakeupOn(criteria); }
public void processStimulus(Enumeration e) { while (e.hasMoreElements()) { WakeupCondition condition = (WakeupCondition)e.nextElement(); if (condition instanceof WakeupOnAWTEvent) { AWTEvent[] events = ((WakeupOnAWTEvent)condition).getAWTEvent(); for (int i = 0; i < events.length; i++) { if (events[i] instanceof KeyEvent) { int code = ( (KeyEvent) events[i]).getKeyCode(); if ( code == KeyEvent.VK_UP && speed <= 5) {speed += 0.01;} if ( code == KeyEvent.VK_DOWN && speed >= -3) {speed -= 0.01;} if ( code == KeyEvent.VK_LEFT && speed != 0 && wheel >= -0.1) {wheel -= 0.05;} //it only turns the wheel when the car moves if ( code == KeyEvent.VK_RIGHT && speed != 0 && wheel <= 0.1) {wheel += 0.05;} } //if } //for }//if AWT event
else if (condition instanceof WakeupOnElapsedTime) { double ds = (speed * dt); double dx = ds * Math.cos(angle); double dz = ds * Math.sin(angle); double dangle = speed * Math.tan(wheel); angle += dangle; if (angle > 2*Math.PI) {angle -= 2*Math.PI;} Matrix3d rotm = new Matrix3d(Math.cos(dangle), 0, -Math.sin(dangle), 0, 1, 0, Math.sin(dangle), 0, Math.cos(dangle));
Transform3D tr = new Transform3D(); Matrix3d orig = new Matrix3d(); Vector3d move = new Vector3d(); target.getTransform(tr); tr.get(move); //retreiving the translation of the car tr.get(orig); //retreiving the rotation of the car orig.mul(rotm); rotm.transform(orient); //updating the orientation of the car (rotating the orig vector) move.x += dx; move.z += dz; location.set(move); //updating the location of the car tr.set(orig); //updating the rotation component of the transform tr.setTranslation(move); //updating the translation component of the transform target.setTransform(tr);
// updating the view TransformGroup vpTR = simpleU.getViewingPlatform(). getViewPlatformTransform(); Transform3D viewT3D = new Transform3D(); Point3d camera = new Point3d(location); camera.sub(orient); viewT3D.lookAt(camera, location, up); viewT3D.invert(); vpTR.setTransform(viewT3D); }//else if time condition }//while wakeupOn(criteria); }//processStimulus }//MyBehavior
The strange is that when I place the camera to the location of the car (before moving it a bit back) then only the camera moves! If I replace the line: Point3d camera = new Point3d(location); with: Point3d camera = new Point3d(); then the car moves perfectly and the camera stands still in thestarting position and looks to the car. Does anybody know why on earth the car doesn't move when I try to follow it with the camera? And sorry if I wrote something ridiculous but I've been trying to find it out really hard but I couldn't solve it... Thanx for any help.
Miklos
=========================================================================== To unsubscribe, send email to [EMAIL PROTECTED] and include in the body of the message "signoff JAVA3D-INTEREST". For general help, send email to [EMAIL PROTECTED] and include in the body of the message "help".
