/// <summary> /// Calculates the rotation required to turn from source to dest /// </summary> /// <param name="sourcePoint"></param> /// <param name="destPoint"></param> /// <param name="UpVector"></param> /// <returns></returns> public static Quaterniond LookAt(Vector3d sourcePoint, Vector3d destPoint, Vector3d UpVector) { Vector3d forwardVector = Vector3d.Normalize(destPoint - sourcePoint); Vector3d rotAxis = Vector3d.Cross(UpVector, forwardVector); double dot = Vector3d.Dot(UpVector, forwardVector); Quaterniond q = new Quaterniond(rotAxis.X, rotAxis.Y, rotAxis.Z, dot + 1); return(q.Normalized()); }