Hi Paul,
Thanx for the answer! Last night I finally found the solution...
When I loaded the model of the car I scaled it down to fit in my
world. And then I attached a TransformGroup for moving it around.
The problem was that the scaling transform scaled down the movement too!
So the car moved just like the camera only far too slow :))
I changed the order of the TranformGroups and it works fine!
Anyway, thank You for bothering with my problem!
Miklos
-----Original Message-----
From: ext Paul Pantera [mailto:[EMAIL PROTECTED]
Sent: June 24,2003 18:51
To: [EMAIL PROTECTED]
Subject: Re: [JAVA3D] transform3d, lookat problem
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".
==========================================================================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".