So, I have a vector (x, y, z) representing angles (in 3D - doh) and a vector velocity (x, y ,z).

For example, if velocity := (10, 0, 0) and the angle := (0, 0, Pi/2), my final vector needs to point up.

Currenly I have this, but I think it's not correct... (tis rotates a point around a point)
[pascal]
function RotateVector(RotatePoint, v, Angle : TD3DVector) : TD3DVector;
var NilPoint : TD3DVector;
begin
NilPoint := VectorSub(v, RotatePoint); // get dist from nilpoint...
v := Nilpoint;

// Z-axis
NilPoint.X := v.X * cos(Angle.Z) - v.Y *sin(Angle.Z);
NilPoint.Y := v.X * sin(Angle.Z) + v.Y *cos(Angle.Z);
v.X := NilPoint.X;
v.Y := NilPoint.Y;

// Y-axis
NilPoint.Y := v.Y * cos(Angle.Y) - v.Z *sin(Angle.Y);
NilPoint.Z := v.Y * sin(Angle.Y) + v.Z *cos(Angle.Y);
v.Y := NilPoint.Y;
v.Z := NilPoint.Z;

// X-axis
NilPoint.X := v.X * cos(Angle.X) - v.Z *sin(Angle.X);
NilPoint.Z := v.X * sin(Angle.X) + v.Z *cos(Angle.X);
v.X := NilPoint.X;
v.Z := NilPoint.Z;

Result := VectorAdd(RotatePoint, NilPoint);
end;
[/pascal]

Why I need this? I'm trying to make a helicopter fly