Ejemplo n.º 1
0
        /// <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());
        }