Hi Kelvin
first thx for the fast response.
I don't know if i understand it right, but is'nt this method used, when
dealing with more then one behavior (using the same wakeup conditions)?
But in my case there is only one behavior where the two transforms are
done, so the problem is'nt sync'ing serveral behaviors.
The two transforms are done in the processStimulus method of the same
behavior (-instance), but they dont affect the next frame rendered
accordingly :(
Maybe i've mistaken your pointer, but i can't see, how this could be a
solution.
- emanuel
one behavior
> Hi Emanuel,
>
> Use this API in v1.3 to make sure that
> behavior update view run before others.
>
> /**
> * Sets the scheduling interval of this Behavior node to the
> * specified value.
> *
> * The scheduling interval defines a partial order of execution
> * for behaviors that wake up in response to the same wakeup
> * condition (that is, those behaviors that are processed at the
> * same "time"). Given a set of behaviors whose wakeup conditions
> * are satisfied at the same time, the behavior scheduler will
> * execute all behaviors in a lower scheduling interval before
> * executing any behavior in a higher scheduling interval. Within
> * a scheduling interval, behaviors can be executed in any order,
> * or in parallel. Note that this partial ordering is only
> * guaranteed for those behaviors that wake up at the same time in
> * response to the same wakeup condition, for example, the set of
> * behaviors that wake up every frame in response to a
> * WakeupOnElapsedFrames(0) wakeup condition.
> *
> * The default value is <code>numSchedulingIntervals / 2</code>.
> *
> * @param schedulingInterval the new scheduling interval
> *
> * @exception IllegalArgumentException if
> * <code>schedulingInterval</code> < 0 or
> * <code>schedulingInterval</code> >=
> * <code>numSchedulingIntervals</code>
> *
> * @since Java 3D 1.3
> */
> public void setSchedulingInterval(int schedulingInterval)
>
> - Kelvin
> --------------
> Java 3D Team
> Sun Microsystems Inc.
>
>
>
> Emanuel Brzostowski wrote:
> > Hello
> >
> > In my little game-project i use a Behavior where the view (let's say,
> inside
> > the cockpit of a spaceship) gets transformed (pitch, roll, yaw,
> translate)
> > according to the keyboard-input.
> > Now there are also stars around my ship (points distributed randomly on
> a
> > imaginary sphere), placed under a TransformGroup.
> > To make the stars moving togehther with my ship (view) i grab the
> > translational part of my newly calculated view-transform and set the
> transform
> > in my StarsTransformGroup to this translation.
> >
> > The StarsTransformGroup is NOT a child of my ViewTransformGroup, because
> i
> > dont want to rotate it together with my view (spaceship).
> > I only want to translate the stars to the view.
> >
> > So in short i do the following in my Behavior
> > (1) transform view (my spaceship ;)
> > (2) translate stars under the StarsTransformGroup accordingly.
> > (all INSIDE the processStimulus method)
> >
> > The problem now arises is that the two transforms seem not to be in sync
> in
> > the rendering:
> > some frames reflect only transform (1), some show transform (2) and some
> do
> > reflect both transforms.
> > The strange thing about this is that this problem only shows up, when
> the
> > translational part of the transforms becomes larger.
> > (I already checked that precision of double is'nt the source of the
> problem
> > and also the order of (1) and (2) plays no role.)
> > The result is a "jumping" starfield (looks awfully choppy) while i move
> the
> > view.
> >
> > Anybody had a similar problem already?
> >
> > here is some technical info about the things i use:
> > - java 1.3.1_03-b03
> > - java 3D beta 1.3 (DirectX)
> > - windoze xp pro
> > - amd athlon 1200C
> > - geforce2
> >
> > I add some (in my opinion) relevant code snippets :
> > (i replaced the stars with a TransformGroup with a ColorCube)
> > (code is not optimal, i know, but thats only for testing ;)
> > ====snipp===================================
> > .
> > .
> > .
> > Canvas3D canvas3d;
> > Transform3D viewTransform;
> > TransformGroup viewTransformGroup;
> > Transform3D StarsTransform;
> > TransformGroup StarsTransformGroup;
> > View myView;
> > .
> > .
> > .
> > public void initUniverse()
> > {
> > canvas3d = new Canvas3D(null); // null = i was lazy ;)
> > VirtualUniverse myUniverse = new VirtualUniverse();
> > Locale myLocale = new Locale(myUniverse);
> > myLocale.addBranchGraph(buildViewBranch(canvas3d));
> > }
> > .
> > .
> > .
> > public BranchGroup buildViewBranch(Canvas3D c)
> > {
> > BranchGroup viewBranch = new BranchGroup();
> > viewTransform = new Transform3D();
> >
> > viewTransformGroup = new TransformGroup(viewTransform);
> >
> > ViewPlatform myViewPlatform = new ViewPlatform();
> >
> >
> > StarsTransform = new Transform3D();
> > StarsTransformGroup = new TransformGroup(StarsTransform);
> >
> StarsTransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
> >
> StarsTransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
> >
> > Transform3D sunTransform = new Transform3D();
> > sunTransform.set(new Vector3d(0.0, 0.0, -10.0));
> > TransformGroup SunTG = new TransformGroup(sunTransform);
> > SunTG.addChild(new ColorCube());
> > StarsTransformGroup.addChild(SunTG);
> >
> > viewTransformGroup.addChild(myViewPlatform);
> >
> > timedBehavior behav = new timedBehavior();
> > behav.setSchedulingBounds(new BoundingSphere(new Point3d(0.0, 0.0,
> 0.0),
> > 1000.0));
> > viewTransformGroup.addChild(behav);
> >
> >
> viewTransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
> >
> viewTransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
> >
> > viewBranch.addChild(viewTransformGroup);
> > viewBranch.addChild(StarsTransformGroup);
> >
> > myView = new View();
> >
> > PhysicalBody myBody = new PhysicalBody();
> > PhysicalEnvironment myEnvironment = new PhysicalEnvironment();
> >
> > myView.setPhysicalBody(myBody);
> > myView.setPhysicalEnvironment(myEnvironment);
> > myView.addCanvas3D(c);
> > myView.attachViewPlatform(myViewPlatform);
> >
> > return(viewBranch);
> > }
> > .
> > .
> > .
> > public class timedBehavior extends Behavior
> > {
> > public boolean running = false;
> > WakeupCriterion[] wakeConditions;
> > WakeupOr oredConditions;
> > AWTEvent ae[];
> > Transform3D moveTrans;
> > Vector3d viewTranslation;
> >
> >
> > public void initialize()
> > {
> > moveTrans = new Transform3D();
> > moveTrans.set(new Vector3d(0.0, 0.0, 100000.0)); //we are moving
> > really fast ;=) so we se the jumpung stars as soon as possible :(
> > viewTranslation = new Vector3d();
> >
> > wakeConditions = new WakeupCriterion[3];
> > wakeConditions[0] = new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED);
> > wakeConditions[1] = new WakeupOnAWTEvent(KeyEvent.KEY_RELEASED);
> > wakeConditions[2] = new WakeupOnElapsedTime(10);
> > oredConditions = new WakeupOr(wakeConditions);
> > wakeupOn(oredConditions);
> > }
> >
> > // things are really straightforward for this testcase: only a
> > translation (if any key pressed), no rotations at all
> > public void processStimulus(Enumeration criteria)
> > {
> > WakeupCriterion theCriteria;
> > if(criteria.hasMoreElements())theCriteria =
> > (WakeupCriterion)criteria.nextElement();
> > else
> > {
> > wakeupOn(oredConditions);
> > return;
> > }
> >
> > if(theCriteria instanceof WakeupOnAWTEvent)
> > {
> > ae = ((WakeupOnAWTEvent)theCriteria).getAWTEvent();
> > if(ae[0].getID()==KeyEvent.KEY_PRESSED) running = true;
> > else if(ae[0].getID()==KeyEvent.KEY_RELEASED) running = false;
> > }
> > else
> > {
> > if(running&&(theCriteria instanceof WakeupOnElapsedTime))
> > {
> > viewTransform.mul(moveTrans);
> >
> > viewTransform.get(viewTranslation);
> >
> > StarsTransform.setTranslation(viewTranslation);
> >
> > StarsTransformGroup.setTransform(StarsTransform);
> > viewTransformGroup.setTransform(viewTransform);
> > }
> > }
> > wakeupOn(oredConditions);
> > }
> > }
> > .
> > .
> > .
> > ====snipp===================================
> >
> > PS: english is not my natural language, so plz not laugh ;)
> >
> > --
> > +++ GMX - Mail, Messaging & more http://www.gmx.net +++
> > NEU: Mit GMX ins Internet. Rund um die Uhr f�r 1 ct/ Min. surfen!
> >
> >
>
===========================================================================
> > 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".
>
--
+++ GMX - Mail, Messaging & more http://www.gmx.net +++
NEU: Mit GMX ins Internet. Rund um die Uhr f�r 1 ct/ Min. surfen!
===========================================================================
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".