From a15bfdc85d04914ec167b5db195d36083e70223f Mon Sep 17 00:00:00 2001 From: Syoyo Fujita Date: Mon, 24 Sep 2018 21:09:24 +0900 Subject: [PATCH] Add missing file. --- examples/skinning/skinning.h | 61 ++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 examples/skinning/skinning.h diff --git a/examples/skinning/skinning.h b/examples/skinning/skinning.h new file mode 100644 index 0000000..b536d49 --- /dev/null +++ b/examples/skinning/skinning.h @@ -0,0 +1,61 @@ +#ifndef EXAMPLE_SKINNING_H_ +#define EXAMPLE_SKINNING_H_ + +#include + +namespace example { + +struct mat4 { + float m[4][4]; +}; + +/// +/// Utility function to build transformation matrix from translate/rotation/scale +/// +/// https://github.com/KhronosGroup/glTF-Tutorials/blob/master/gltfTutorial/gltfTutorial_004_ScenesNodes.md +/// +/// M = T * R * S +/// +void BuildTransofrmMatrix( + const float translate[3], + const float rotation[4], // as quaternion in glTF + const float scale[3], + mat4 *transform_matrix); + + +/// +/// Compute joint matrices. +/// +/// jointMatrix(j) = +/// globalTransformOfNodeThatTheMeshIsAttachedTo^-1 * +/// globalTransformOfJointNode(j) * +/// inverseBindMatrixForJoint(j); +/// + +void ComputeJointMatrices( + const std::vector global_transform_of_nodes, + const std::vector global_transform_of_joint_nodes, + const std::vector inverse_bind_matrix_for_joints, + std::vector output_joint_matrices); + + +/// +/// +/// @param[in] vertices Input vertices(# of elements = num_vertices * 4(xyzw)) +/// @param[in] weights Linearized weights(# of elements = num_vertices * num_skinning_weights) +/// @param[in] weights Linearized weights(# of elements = num_vertices * num_skinning_weights) +/// @param[in] num_weights Linearized weights(# of elements = num_vertices * +/// @param[in] joint_matrices Array of joint matricies. +/// @param[in] t Interpolator. [0.0, 1.0] +/// @param[in] skinned_vertices Resulting skinned vertices +/// +void Skining(const std::vector vertices, + const std::vector weights, const std::vector joints, + const size_t num_skinning_weights, + const std::vector joint_matrices, + const float t, + std::vector *skinned_vertices); + +} // namespace example + +#endif // EXAMPLE_SKINNING_H_