diff options
author | Thales Lima Oliveira <thaleslima.ufu@gmail.com> | 2020-07-08 12:05:44 -0300 |
---|---|---|
committer | Thales Lima Oliveira <thaleslima.ufu@gmail.com> | 2020-07-08 12:05:44 -0300 |
commit | cc2e40324d884bc0417809980a696a5084e661d7 (patch) | |
tree | 9620dfa32e44af5c125aac2c9bce36011ad27b8b /Project/glm/ext/quaternion_geometric.inl | |
parent | ae765504642759ba4addbf91d62f167ba5f063a3 (diff) | |
download | PSP.git-cc2e40324d884bc0417809980a696a5084e661d7.tar.gz PSP.git-cc2e40324d884bc0417809980a696a5084e661d7.tar.xz PSP.git-cc2e40324d884bc0417809980a696a5084e661d7.zip |
GLM folder changed
Diffstat (limited to 'Project/glm/ext/quaternion_geometric.inl')
-rw-r--r-- | Project/glm/ext/quaternion_geometric.inl | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/Project/glm/ext/quaternion_geometric.inl b/Project/glm/ext/quaternion_geometric.inl new file mode 100644 index 0000000..e155ac5 --- /dev/null +++ b/Project/glm/ext/quaternion_geometric.inl @@ -0,0 +1,36 @@ +namespace glm +{ + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER T dot(qua<T, Q> const& x, qua<T, Q> const& y) + { + GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'dot' accepts only floating-point inputs"); + return detail::compute_dot<qua<T, Q>, T, detail::is_aligned<Q>::value>::call(x, y); + } + + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER T length(qua<T, Q> const& q) + { + return glm::sqrt(dot(q, q)); + } + + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER qua<T, Q> normalize(qua<T, Q> const& q) + { + T len = length(q); + if(len <= static_cast<T>(0)) // Problem + return qua<T, Q>(static_cast<T>(1), static_cast<T>(0), static_cast<T>(0), static_cast<T>(0)); + T oneOverLen = static_cast<T>(1) / len; + return qua<T, Q>(q.w * oneOverLen, q.x * oneOverLen, q.y * oneOverLen, q.z * oneOverLen); + } + + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER qua<T, Q> cross(qua<T, Q> const& q1, qua<T, Q> const& q2) + { + return qua<T, Q>( + q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z, + q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y, + q1.w * q2.y + q1.y * q2.w + q1.z * q2.x - q1.x * q2.z, + q1.w * q2.z + q1.z * q2.w + q1.x * q2.y - q1.y * q2.x); + } +}//namespace glm + |