core::vector3df getTargetAngle(core::vector3df v, core::vector3df r) { #define PI 3.14159265358979323846 //v -position //r -target core::vector3df angle; float x,y,z; x = r.X - v.X; y = r.Y - v.Y; z = r.Z - v.Z; //angle in X-Z plane angle.Y = atan2 (x, z); angle.Y *= (180 / PI); //converting from rad to degrees //angle.Y-=90; //just making sure angle is somewhere between 0-360 degrees if(angle.Y < 0) angle.Y += 360; if(angle.Y >= 360) angle.Y -= 360; //angle in Y-Z plane while Z and X axes are already rotated around Y float z1 = sqrt(x*x + z*z); angle.X = atan2 (z1, y); angle.X *= (180 / PI); //converting from rad to degrees //angle.X -= 90; //just making sure angle is somewhere between 0-360 degrees if(angle.X < 0) angle.X += 360; if(angle.X >= 360) angle.X -= 360; return angle; }