4#include <glm/ext/quaternion_float.hpp>
10 inline glm::vec3 euclidean(
const glm::vec4 h)
12 return (1.f / h.w) * glm::vec3(h);
15 inline glm::quat getRotation(glm::vec3 src, glm::vec3 dest)
17 glm::vec3 from = glm::normalize(src);
18 glm::vec3 to = glm::normalize(dest);
20 const float dot = glm::dot(from, to);
21 auto crossvec = glm::cross(from, to);
22 const float crosslen = glm::length(crossvec);
24 if (crosslen == 0.0f) {
26 return glm::quat(1.0f, 0.0f, 0.0f, 0.0f);
29 glm::vec3 t = glm::cross(from, glm::vec3(1.0f, 0.0f, 0.0f));
31 if (glm::length(t) == 0.0f) {
32 t = glm::cross(from, glm::vec3(0.0f, 1.0f, 0.0f));
33 t = glm::normalize(t);
35 return glm::quat(0.0f, t);
39 crossvec = glm::normalize(crossvec);
44 crossvec *= std::sqrt(0.5f * std::fabs(1.0f - dot));
48 return glm::quat(std::sqrt(0.5f * std::fabs(1.0f + dot)), crossvec);
Contains the Engine, Renderer, resource managers and other systems needed to run Cogs....