www.jpct.net

jPCT-AE - a 3d engine for Android => Support => Topic started by: sushobhit on March 30, 2014, 02:39:24 pm

Title: Setting the Translate Path for an object
Post by: sushobhit on March 30, 2014, 02:39:24 pm
Hi Friends , WISH ALL A JOYFUL APRIL FOOL's DAY :P

Actually i was working on a Project regarding  a Prison.
In the prison there are 20 convicts . Out of 20 one is our hero & he has to escape the prison.
Now,
I have set up the Prison enviornment. It has JailCells , 2 Basketball Courts , Medicine Room , Cafe etc etc.

Now ,
The hero is controlled by the user using MotionTouch Events. So that's not a problem.
The problem is the rest of convicts operate by AI(Artificial Intelligence) so they have to be programmed.

Now ,
I want to set a Path for each konvict like :

Path Start (JailCell)     ->                               Path End (BasketBall Court)
So once the path is set set the object should translate itself from jailcell to the basketball court.

One thing is I simply translate(jail) -> translate(BBCourt) but that looks very robotic.

I want it to look humanly
To Egon : Like you have class ParticleManager , any class for PathMaker if YES please share

And also the object should avoid any collisions in between

What should I do , what is the most Optimised way of achieving this...
Title: Re: Setting the Translate Path for an object
Post by: EgonOlsen on March 30, 2014, 09:08:08 pm
I'm doing something very similar in my RPG, but the code is to convoluted to be useful for anybody but me. What i'm basically doing is to take the current position of an entity, create the direction vector (a) to the target and rotate the entity in a way that it's direction vector (b) slowly turns towards that vector a. Then move the entity into the direction in which it's facing. That way, they move more natural around sharp edges in the path.

For reference, this is the part that does the interpolation:

Code: [Select]
                        dir.set(p.x, 0, p.z);
tmp.set(current.x, 0, current.z);

dir.sub(tmp);
dir.normalize(dir);

dir.scalarMul(speed);

if (!reached && entity != null) {
dir.getRotationMatrix(tmpMatrix);
if (ticks == 1) {
entity.getRotation().interpolate(entity.getRotation(), tmpMatrix, 0.51f);
} else {
entity.getRotation().setTo(tmpMatrix);
}
}
Title: Re: Setting the Translate Path for an object
Post by: kkl on March 31, 2014, 03:36:09 am
You might wanna look at Bezier Path or Catmul-Rom Path. They are very useful in translating your 3D object along the path. It's hard to build that math algorithm from scratch, but fortunately, some did it. This library has the algorithm available, you can check the source code. https://github.com/MasDennis/Rajawali (https://github.com/MasDennis/Rajawali)