diff options
Diffstat (limited to 'extern/softbody/src/admmpd_solver.cpp')
-rw-r--r-- | extern/softbody/src/admmpd_solver.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/extern/softbody/src/admmpd_solver.cpp b/extern/softbody/src/admmpd_solver.cpp index 17bd8c7d008..5f81c9c565c 100644 --- a/extern/softbody/src/admmpd_solver.cpp +++ b/extern/softbody/src/admmpd_solver.cpp @@ -49,7 +49,8 @@ bool Solver::init( int Solver::solve( const Options *options, - SolverData *data) + SolverData *data, + Collision *collision) { BLI_assert(data != NULL); BLI_assert(options != NULL); @@ -71,7 +72,7 @@ int Solver::solve( solve_local_step(options,data); // Perform collision detection and linearization - update_constraints(options,data); + update_constraints(options,data,collision); // Solve Ax=b s.t. Kx=l data->b.noalias() = data->M_xbar + data->DtW2*(data->z-data->u); @@ -152,18 +153,24 @@ void Solver::solve_local_step( void Solver::update_constraints( const Options *options, - SolverData *data) + SolverData *data, + Collision *collision) { BLI_assert(data != NULL); BLI_assert(options != NULL); + if (collision==NULL) + return; + + collision->detect(&data->x_start, &data->x); + std::vector<double> l_coeffs; std::vector<Eigen::Triplet<double> > trips_x; std::vector<Eigen::Triplet<double> > trips_y; std::vector<Eigen::Triplet<double> > trips_z; // TODO collision detection -// FloorCollider().jacobian( +// collision->jacobian( // &data->x, // &trips_x, // &trips_y, |