v3_add( rp->collider_mtx[3], bone->co, rp->obj.rb.co );
v3_zero( rp->obj.rb.v );
v3_zero( rp->obj.rb.w );
- rb_init_object( &rp->obj );
+ rb_init_object( &rp->obj, 4.0f );
}
/*
* SOLVE CONSTRAINTS & Integrate
*/
if( run_sim ){
- for( int i=0; i<12; i++ ){
- rb_solve_contacts( rb_contact_buffer, rb_contact_count );
- rb_solve_swingtwist_constraints( rd->cone_constraints,
- rd->cone_constraints_count );
+ /* the solver is not very quickly converging so... */
+ for( int i=0; i<40; i++ ){
+ if( i<20 ){
+ rb_solve_contacts( rb_contact_buffer, rb_contact_count );
+ rb_solve_swingtwist_constraints( rd->cone_constraints,
+ rd->cone_constraints_count );
+ rb_postsolve_swingtwist_constraints( rd->cone_constraints,
+ rd->cone_constraints_count );
+ }
rb_solve_position_constraints( rd->position_constraints,
rd->position_constraints_count );
}
+ rb_correct_position_constraints( rd->position_constraints,
+ rd->position_constraints_count,
+ k_ragdoll_correction * 0.5f );
+ rb_correct_swingtwist_constraints( rd->cone_constraints,
+ rd->cone_constraints_count,
+ k_ragdoll_correction * 0.25f );
+
for( int i=0; i<rd->part_count; i++ ){
rb_iter( &rd->parts[i].obj.rb );
for( int i=0; i<rd->part_count; i++ )
rb_update_transform( &rd->parts[i].obj.rb );
-
- for( int i=0; i<5; i ++ ){
- rb_correct_swingtwist_constraints( rd->cone_constraints,
- rd->cone_constraints_count,
- k_ragdoll_correction * 0.25f );
-
- rb_correct_position_constraints( rd->position_constraints,
- rd->position_constraints_count,
- k_ragdoll_correction * 0.5f );
- }
}
rb_ct *stress = NULL;