I know, this has caused me problems (I must be getting old
), the rule of thumb I use is,
vec_rotate(dir,angle) rotates an "OFFSET" through the pan/tilt/roll of angle.
Example 1:
(Offset from car's centre to front right wheel = x60,y20,z0)
//--------- pseudo code --------
Wheel.x = 60;
Wheel.y = 20;
Wheel.z = 0;
//Cars pan/tilt/roll = 30/15/0
Vec_rotate(Wheel.x,Car.Pan)
This will rotate the right front wheel's offest to the pan/tilt/roll of the car.
The wheel will still need it's pan/tilt/roll matched to the car
vec_set(wheel.pan,car.pan)
& then the wheel will move exactly with the car.
As you can see vec_rotate rotated an offset (or displacement vector).
Now ang_rotate(vector1,vector2) rotates vector1's(pan/tilt/roll) through vector2's (pan/tilt/roll). It's rotating a group of angles by another group of angles. Not like vec_rotate which rotates a position by a group of angles.
(at least this is how I see it )