示例#1
0
static void idle_func ( void )
{
	if ( dsim ) simulation_step( pVector, dt );
	else        {get_from_UI();remap_GUI();}

	glutSetWindow ( win_id );
	glutPostRedisplay ();
}
示例#2
0
static void idle_func ( void )
{
    if ( dsim ){
        integrator->integrate( *sys, dt );
        get_from_UI();
    }
    else        {remap_GUI();}

    glutSetWindow ( win_id );
    glutPostRedisplay ();
}
示例#3
0
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();
}