I understand you want the car ispathdriven but I'm not sure I have a
clear picture of what you want the car be able to do.
There are tons of options, but here a few directions that might help
you.
Say you want it stays free, yet within the bounderies of the road,
witch is defined by thepath.
1/ to use a container or a dummy object. they are driven by thepath.
in container case, the car would be in it.
2/ just define a distance. then when you move the car just check the
distance from the car to the dummy or container position.
this allows you to check direction, like for instance "you're going
wrong way", you just need to compare pathanimator.time with actual
time.
the increase the time, just make your acceleration angular, based on
the rotations of the object into the container. since the container
is pathdriven with an align topath,
the direction vector is equal to the rotations props of the
container.
you can also, if your road is not pathextruded, just ask positions
based on time and apply the result to your object.
getPositionOnPath( p:Number3D, t:Number). But here you miss indeed
the
directional vector. I will add a getter for the directional vector.
It
will return the last generated one of the animated object.
if you want to do it yourself just save the vector in the orientateAt
handler.
Say now that you want car to follow a randompath. define just 3
segments.
add a segmentListener.
on event, just calculate a radius from actual object position, set
first segment end to a random angle based on that radius.
then push(shift) thepathinfo, smoothpath. If done right, thepath
should "scroll" itself under the car.
if the car just drives arround and you want to save power by not
recalculating a new segment each event, just pop shift thepathinfo,
and give a longerpathdefinition with enough variation.
Hope it helps a bit.
Fabrice
On Nov 22, 2008, at 9:38 AM, cellis wrote:
ok it is starting to make some sense now...
in regards to thepathanimation and rotations... perhaps this will
clarify what i am trying to do
1. generate a randompathfor the car to follow ... this is simple,
just a series of Number3D points (for instance a road)
2. pass generatedpathto pathanimation
so i cannot do the rotations by hand ... these need to be setup
dynamically on the fly and then passed to the rotations.
then, if the series define a curve (not a straight line), i need to
calculate direction using either Atan2(), Catmull - Rom (splines),
or
something else (i'm open to suggestions, these are just what books
and
other people have been telling me). For instance...this from another
forum--
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
"In general terms, the direction the car is pointing is along its
velocity vector, which is the first derivative of its position
vector.
For example, if the car is going in a circle (of radius r) around
the
origin every n seconds then the x component of the car's position is
given by:
x = r.sin(2πt/n)
and the x component of its velocity vector will be:
vx = dx/dt = r.(2π/n)cos(2πt/n)
Do this for all of the x, y and z components, normalize the
resulting
vector and you have your direction."
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
^^ Do you have some insight has to how that formula can be applied
with apathanimator, or should i set up a custom tween/animation?
On Nov 16, 1:37 pm, Fabrice <[EMAIL PROTECTED]> wrote:
The rotations property is an array of number3D's, each one is the
representation of the rotation for the animated object along
thepath
at the start of a CurveSegment.
but since you use the align topath, you have only one axis free. 2
others being used by the code.
so say you have 2 curveSegments defined and want your object
align on
pathand having a rotation arround thepathdirection.
rotations property would be for instance
var a:Array = [new Number3D(20, 0,0), new Number3D(-20, 0,0), new
Number3D(0, 0,0) ];
rotations = a;
so your object will start align topathwith a 20, in middel at -20
and will exit thepathwith ) rotation.
The reason it might look like its a Z rotation while its a X
one, is
the direct result of the way you define yourpath.
Onepathgoing in z would be affected another way than apathdefine
along the x axis.
That's why thePathhas a WorldAxis property.
to rotate your model if its sidewards, use first
model.rotationY = 90;
(model as Mesh).applyRotations();
now its pointing on thepathusing the pathanimator. And it has
nothing to do with the rotations applied while its animated.
Its a rotation at mesh level.
also not that in some cases, changing of world quadrants can also
influence the behavior. To avoid those, just be sure yourpath
definition gets an offset big enough
to stay within one quadrant. mmm I stop now, don't want to confuse
you :)
Fabrice
On Nov 16, 2008, at 5:43 PM, cellis wrote:
Hey fabrice,
i tried passing
rotations:[90,90,90]; //to thepathData, but i'm not sure it
worked...
i'm not quite sure of the syntax to use here: should it be an
anonymous object?
could you please post an example of apathdata object declared?
here
is mine
var animInit:Object =
{
duration:5000,
lookat:false,
aligntopath:true,
targetobject:null,
offset:new Number3D(0, 100, 0),
rotations:[90,90,90],
fps:30,
easein:false,
easeout:false
}
Again, thanks alot!
On Nov 15, 11:16 am, Fabrice <[EMAIL PROTECTED]> wrote:
Sure you can,
just say
object.rotationY = 90; //--> or whatever is needed
then
(object as Mesh).applyRotations();//rotates internally the mesh
geometry
//--> rotationY is now back to zero if you trace, while your mesh
is
remains rotated on the Y axis
the rotations property on the PathAnimator are there to allow to
have
rotations along thepath.
say you have an aircraft, you define apaththat goes from air to
ground where you want it crash.
when align topathprop is set the aircraft would point at thepath
direction.
but if you want the aircraft has also some roll influence while
following thepath, just pass a rotations array, a series of
Number3d,
acting per CurveSegments
the Number3d are representing in this case the rotational
influence
(rotx, roty, rotz). they are applyed or a linear fashion between
start
and end of the segments.
if less Number3D's are passed than the length of thepath, the
last
influence is kept until the end of thepath.
Note that it can work pretty confusing, so I suggest you start
with
just 2 segments and play,
best way would be to comment all other segments into yourpath
definition, then gradually add rotations andpathsegments.
Fabrice
On Nov 15, 2008, at 4:41 PM, cellis wrote:
Awesome!
That worked Fabrice.
Now i have another problem and i'm not sure if i have to bust
out
the
trig for this. My object animates along thepath, but doesn't
point in
that direction. For instance if it was a Car object, instead of
looking like it is driving forward on thatpath, it looks instead
like
it is drifting along thepath. Are there any built in functions
for
this or do i have to do the rotation by hand?
I was unsure as to how to use the rotations property on thepath
data...
Thanks alot!
On Nov 15, 7:14 am, Fabrice <[EMAIL PROTECTED]> wrote:
I've posted a tutorial on this a few days ago...
http://away3d.com/tutorials/tutorial-how-to-use-the-pathanimator-
class
More are coming on how to mixe this class with otherPathbased
classes.
So keep an eye on the tutorial section at away3d.com.
Fabrice
On Nov 15, 2008, at 10:21 AM, paullaster wrote:
Wanted to post this helpful doc about PathAnimator to the
Google
group community.