12#include <glm/gtc/quaternion.hpp>
26int syncModeFromString(
const std::string &mode) {
27 return mode ==
"body" ? 1 : 0;
30glm::quat nodeQuaternion(
const SceneNode &
n) {
31 return glm::angleAxis(
n.yaw, glm::vec3(0.f, 1.f, 0.f)) *
32 glm::angleAxis(
n.pitch, glm::vec3(1.f, 0.f, 0.f)) *
33 glm::angleAxis(
n.roll, glm::vec3(0.f, 0.f, 1.f));
37void decomposeWorld(
const glm::mat4 &
w, glm::vec3 &
pos, glm::vec3 &euler,
39 pos = glm::vec3(
w[3]);
40 glm::vec3 c0(
w[0]), c1(
w[1]), c2(
w[2]);
41 scale = glm::vec3(glm::length(c0), glm::length(c1), glm::length(c2));
45 glm::mat3 rot(c0, c1, c2);
46 glm::quat q = glm::quat_cast(rot);
47 glm::vec3 e = glm::eulerAngles(q);
48 euler = glm::vec3(e.y, e.x, e.z);
int findLinkKind(const char *kind)