#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef std::vector > RotationList; const Eigen::RowVector3d sea_green(70./255.,252./255.,167./255.); Eigen::MatrixXd V,W,C,U,M; Eigen::MatrixXi F,BE; Eigen::VectorXi P; std::vector poses; double anim_t = 0.0; double anim_t_dir = 0.015; bool use_dqs = false; bool recompute = true; bool pre_draw(igl::opengl::glfw::Viewer & viewer) { using namespace Eigen; using namespace std; if(recompute) { // Find pose interval const int begin = (int)floor(anim_t)%poses.size(); const int end = (int)(floor(anim_t)+1)%poses.size(); const double t = anim_t - floor(anim_t); // Interpolate pose and identity RotationList anim_pose(poses[begin].size()); for(int e = 0;e vT; igl::forward_kinematics(C,BE,P,anim_pose,vQ,vT); const int dim = C.cols(); MatrixXd T(BE.rows()*(dim+1),dim); for(int e = 0;e