static void idle_func ( void ) { if ( dsim ) simulation_step( pVector, dt ); else {get_from_UI();remap_GUI();} glutSetWindow ( win_id ); glutPostRedisplay (); }
static void idle_func ( void ) { if ( dsim ){ integrator->integrate( *sys, dt ); get_from_UI(); } else {remap_GUI();} glutSetWindow ( win_id ); glutPostRedisplay (); }
static void init_system(void) { const double dist = 0.2; const Vec2f center(0.0, 0.0); const Vec2f offset(dist, 0.0); const Vec2f offset1(0.0, dist); // Create three particles, attach them to each other, then add a // circular wire constraint to the first. pVector.push_back(new Particle(center - offset, 1)); pVector.push_back(new Particle(center - 2 * offset, 1)); pVector.push_back(new Particle(center - 3 * offset, 1)); // pVector.push_back(new Particle(center + offset + offset, 1)); // pVector.push_back(new Particle(center + offset + offset + offset, 2)); // pVector.push_back(new Particle(center + offset + offset1, 2)); // fVector.push_back(new SpringForce(pVector[0], pVector[1], 2*dist, 0.5, 0.1)); // fVector.push_back(new SpringForce(pVector[3], pVector[0], dist, 0.5, 0.1)); // fVector.push_back(new AngularForce(pVector[3], pVector[0], pVector[1], 0.2*3.14159265, 0.5, 1.0)); /* char choice; std::cout << "Hair or cloth? h/c" << std::endl; std::cin >> choice; if (choice == 'c') { std::cout << "Diagonal springs? [y]/n" << std::endl; std::cin >> choice; bool diagonals = !(choice == 'n'); create_grid(7, diagonals); } else { Vec2f offset2(0.02, dist); Vec2f offX = offset * -2; pVector.push_back(new Particle(center - offX - offset1, 2)); pVector.back()->m_Fixed = true; pVector.push_back(new Particle(center - offX, 2)); pVector.back()->m_Fixed = true; for (int i = 1; i <= 3; i++) { pVector.push_back(new Particle(center - offX + i * offset2, 2)); fVector.push_back(new AngularForce(pVector[pVector.size() - 1], pVector[pVector.size() - 2], pVector[pVector.size() - 3], 3.14159265, 0.025, 3)); fVector.push_back(new SpringForce(pVector[pVector.size() - 2], pVector[pVector.size() - 1], 0.2, 8.0, 9.0)); } offset2 = Vec2f(dist,0.02); offX = offset * 4; pVector.push_back(new Particle(center - offX - offset1, 2)); pVector.back()->m_Fixed = true; pVector.push_back(new Particle(center - offX, 2)); pVector.back()->m_Fixed = true; for (int i = 1; i <= 3; i++) { pVector.push_back(new Particle(center - offX + i * offset2, 2)); fVector.push_back(new AngularForce(pVector[pVector.size() - 1], pVector[pVector.size() - 2], pVector[pVector.size() - 3], 3.14159265, 0.02, 5)); fVector.push_back(new SpringForce(pVector[pVector.size() - 2], pVector[pVector.size() - 1], 0.2, 8.0, 9.0)); } }*/ std::vector< int > ids; ids.push_back(0); fConstraint.push_back(new CircularWireConstraint(pVector[0], center, dist, ids)); ids.push_back(1); fConstraint.push_back(new RodConstraint(pVector[0], pVector[1], dist, ids)); ids.push_back(2); ids.erase (ids.begin()); fConstraint.push_back(new RodConstraint(pVector[1], pVector[2], dist, ids)); ids.erase (ids.begin()); fConstraint.push_back(new CircularWireConstraint(pVector[2], (center-3*offset)+offset1, dist, ids)); for (int i = 0; i < pVector.size(); i++) { // fVector.push_back(new Gravity(pVector[i], Vec2f(0,-0.01))); fVector.push_back(new Drag(pVector[i], 0.10)); fVector.push_back(new Gravity(pVector[i], Vec2f(0, -0.01))); // fVector.push_back(new Drag(pVector[i], 0.10)); } mouse_force = new MouseForce(pVector, 0.1, 1.0, 1.0, 0.6); fVector.push_back(mouse_force); // delete_this_dummy_rod = new RodConstraint(pVector[1], pVector[2], dist); // delete_this_dummy_wire = new CircularWireConstraint(pVector[0], center, dist); // remap_GUI(); }