#include "precomputation.h" #include #include #include #include #include #include void precomputation( const Eigen::MatrixXd & V, const Eigen::MatrixXi & F, const Eigen::MatrixXd & W, Eigen::MatrixXd & M, Eigen::VectorXi & b, Eigen::MatrixXd & L, igl::ARAPData & arap_data, igl::ARAPData & arap_grouped_data, igl::ArapDOFData & arap_dof_data) { using namespace Eigen; using namespace std; igl::lbs_matrix_column(V,W,M); // Cluster according to weights VectorXi G; { VectorXi S; VectorXd D; igl::partition(W,50,G,S,D); } // vertices corresponding to handles (those with maximum weight) { VectorXd maxW; igl::max(W,1,maxW,b); } // Precomputation for FAST cout<<"Initializing Fast Automatic Skinning Transformations..."< Aeq; Aeq.resize(m*3,m*3*(3+1)); vector > ijv; for(int i = 0;i(3*i + d,i + c*m*3 + d*m, homo(c))); } } } Aeq.setFromTriplets(ijv.begin(),ijv.end()); igl::arap_dof_precomputation(V,F,M,G,arap_dof_data); igl::arap_dof_recomputation(VectorXi(),Aeq,arap_dof_data); // Initialize MatrixXd Istack = MatrixXd::Identity(3,3+1).replicate(1,m); igl::columnize(Istack,m,2,L); // Precomputation for ARAP cout<<"Initializing ARAP..."<