+ // TODO: Now rotate all the nodes so that they point towards each other
+ // Don't need to rotate the last node - it has nothing to point towards
+ for (size_t i = 0; i < chain.size() - 1; i++) {
+ auto node = chain[i]; auto nextNode = chain[i + 1];
+ mat4 oldTrans = aiMatrixToMat4(node.ai.mTransformation);
+ vec3 nodePos = extractPos(oldTrans);
+ vec3 nextNodePos = extractPos(aiMatrixToMat4(nextNode.ai.mTransformation));
+
+
+ /* vec3 up = normalize(oldTrans[1]); */
+ vec3 up = {0, 1, 0};
+ vec3 dir = -normalize(nextNodePos);
+ /* mat4 rot = mat3(aiMatrixToMat4(nextNode.ai.mTransformation)); */
+ /* mat4 rot = transpose(lookAt(vec3(0), dir, {0, 1, 0})); */
+
+ vec3 v = cross(up, dir);
+ mat3 sscpm = mat3(0, -v[2], v[1],
+ v[2], 0, -v[0],
+ -v[1], v[0], 0);
+ mat4 rot = mat3(1) + sscpm + sscpm * sscpm * (1.f / 1.f + dot(up, dir));
+ /* mat4 rot = rotate(mat4(1), 0.01f, {0, 1, 0}); */
+ /* mat4 rot = mat4(1); */
+
+
+ mat4 trans = oldTrans * rot * inverse(oldTrans);
+ node.ai.mTransformation = mat4ToaiMatrix(trans * oldTrans);
+ for (auto child: node.getChildren()) {
+ child->ai.mTransformation = mat4ToaiMatrix(inverse(rot) * aiMatrixToMat4(child->ai.mTransformation));
+ }
+