Add files via upload

master
CaptainCarrot ago%!(EXTRA string=8 years) committed by GitHub
parent 7223cd1b47
commit 3ee83a15ef
  1. 28
      glm/gtx/quaternion.hpp
  2. 34
      glm/gtx/quaternion.inl

@ -177,6 +177,34 @@ namespace glm
vec<3, T, P> const & orig,
vec<3, T, P> const & dest);
/// Build a look at quaternion based on the default handedness.
///
/// @param direction Desired direction of the camera.
/// @param up Up vector, how the camera is oriented.. Typically (0, 0, 1).
template<typename T, precision P>
GLM_FUNC_DECL tquat<T, P> quatLookAt(
tvec3<T, P> const & direction,
tvec3<T, P> const & up);
/// Build a right-handed look at quaternion.
///
/// @param direction Desired direction of the camera.
/// @param up Up vector, how the camera is oriented. Typically (0, 0, 1).
template<typename T, precision P>
GLM_FUNC_DECL tquat<T, P> quatLookAtRH(
tvec3<T, P> const & direction,
tvec3<T, P> const & up);
/// Build a left-handed look at quaternion.
///
/// @param eye Position of the camera
/// @param direction Desired direction onto which the +z-axis gets mapped
/// @param up Up vector, how the camera is oriented. Typically (0, 0, 1).
template <typename T, precision P>
GLM_FUNC_DECL tquat<T, P> quatLookAtLH(
tvec3<T, P> const & direction,
tvec3<T, P> const & up);
/// Returns the squared length of x.
///
/// @see gtx_quaternion

@ -209,4 +209,38 @@ namespace glm
rotationAxis.z * invs);
}
template<typename T, precision P>
GLM_FUNC_QUALIFIER tquat<T, P> quatLookAt(tvec3<T, P> const& direction, tvec3<T, P> const& up)
{
# if GLM_COORDINATE_SYSTEM == GLM_LEFT_HANDED
return quatLookAtLH(direction, up);
# else
return quatLookAtRH(direction, up);
# endif
}
template<typename T, precision P>
GLM_FUNC_QUALIFIER tquat<T, P> quatLookAtRH(tvec3<T, P> const& direction, tvec3<T, P> const& up)
{
tmat3x3<T, P> Result(uninitialize);
Result[2] = -normalize(direction);
Result[0] = normalize(cross(up, Result[2]));
Result[1] = cross(Result[2], Result[0]);
return quat_cast(Result);
}
template<typename T, precision P>
GLM_FUNC_QUALIFIER tquat<T, P> quatLookAtLH(tvec3<T, P> const& direction, tvec3<T, P> const& up)
{
tmat3x3<T, P> Result(uninitialize);
Result[2] = normalize(direction);
Result[0] = normalize(cross(up, Result[2]));
Result[1] = cross(Result[2], Result[0]);
return quat_cast(Result);
}
}//namespace glm

Loading…
Cancel
Save