예제 #1
0
void initialize_practical_05_scene( Viewer& viewer )
{
    //Set up a shader and add a 3D frame.
    ShaderProgramPtr flatShader = std::make_shared<ShaderProgram>(  "../../sfmlGraphicsPipeline/shaders/flatVertex.glsl", 
                                                                    "../../sfmlGraphicsPipeline/shaders/flatFragment.glsl");
    viewer.addShaderProgram( flatShader );
    FrameRenderablePtr frame = std::make_shared<FrameRenderable>(flatShader);
    viewer.addRenderable(frame);

    //Initialize a dynamic system (Solver, Time step, Restitution coefficient)
    DynamicSystemPtr system = std::make_shared<DynamicSystem>();
    EulerExplicitSolverPtr solver = std::make_shared<EulerExplicitSolver>();
    system->setSolver(solver);
    system->setDt(0.01);

    //Create a renderable associated to the dynamic system
    //This renderable is responsible for calling DynamicSystem::computeSimulationStep() in the animate() function
    //It is also responsible for some of the key/mouse events
    DynamicSystemRenderablePtr systemRenderable = std::make_shared<DynamicSystemRenderable>(system);
    viewer.addRenderable(systemRenderable);

    //Populate the dynamic system with particles, forcefields and create renderables associated to them for visualization.
    //Uncomment only one of the following line

    practical05_particles(viewer, system, systemRenderable);
    //practical05_springs(viewer, system, systemRenderable);
    //practical05_collisions(viewer, system, systemRenderable);
    //practical05_playPool(viewer, system, systemRenderable);

    //Finally activate animation
    viewer.startAnimation();
}
예제 #2
0
void initialize_practical_01_scene(Viewer& viewer)
{
    // create all shaders of this scene, then add them to the viewer
    ShaderProgramPtr defaultShader
        = std::make_shared<ShaderProgram>("../shaders/defaultVertex.glsl",
                                          "../shaders/defaultFragment.glsl");
    ShaderProgramPtr flatShader
        = std::make_shared<ShaderProgram>("../shaders/flatVertex.glsl",
                                          "../shaders/flatFragment.glsl");
    viewer.addShaderProgram(defaultShader);
    viewer.addShaderProgram(flatShader);

    // create renderable objects
    viewer.addRenderable(std::make_shared<FrameRenderable>(defaultShader));

    std::shared_ptr<teachers::CubeRenderable> teachersCube
        = std::make_shared<teachers::CubeRenderable>(flatShader);
    teachersCube->setModelMatrix(glm::translate(glm::mat4(), glm::vec3(2.0, 0.0, 0.0)));
    viewer.addRenderable(teachersCube);

    std::shared_ptr<teachers::IndexedCubeRenderable> teachersIndexedCube
        = std::make_shared<teachers::IndexedCubeRenderable>(flatShader);
    teachersIndexedCube->setModelMatrix(glm::translate(glm::mat4(), glm::vec3(-2.0, 0.0, 0.0)));
    viewer.addRenderable(teachersIndexedCube);

    // MeshRenderablePtr mesh = std::make_shared<MeshRenderable>(pointLightShader, "./../meshes/suzanne.obj");
    // mesh->setModelMatrix( glm::translate(glm::mat4(1.0), glm::vec3(-6,2,0)) );
    // viewer.addRenderable(mesh);
}
예제 #3
0
int main(int argc, char** argv) {
    // Read command lines arguments.
    QApplication application(argc, argv);

    // Instantiate the viewer.
    Viewer viewer;

    // build your scene here

    //viewer.addRenderable(new Terrain(SIZE_TERRAIN));
    //viewer.addRenderable(new Human(0.5));
    Terrain * terrain = new Terrain(SIZE_TERRAIN);
    viewer.addRenderable(terrain);
    viewer.addRenderable(new Landscape());
    Human * human = new Human(1.0,Vec(0.0,0.0,30.0),Vec(0.0,0.0,HEIGHT_SCENE));
    viewer.addRenderable(new DynamicSystem(terrain,human));

    viewer.setWindowTitle("Projet Graphique 3D");
    // Make the viewer window visible on screen.
    viewer.show();

    // Run main loop.
    return application.exec();
}
예제 #4
0
int main(int argc, char** argv)
{
	// Read command lines arguments.
	QApplication application(argc,argv);

	// Instantiate the viewer.
	Viewer viewer;

	// build your scene here
        //viewer.addRenderable(new Cube());
        //viewer.addRenderable(new Cylinder());
        //viewer.addRenderable(new Model());
        //Dragon *d = new Dragon();
        viewer.addRenderable(new Dragon());

	viewer.setWindowTitle("viewer");
	// Make the viewer window visible on screen.
	viewer.show();

	// Run main loop.
	return application.exec();
}
예제 #5
0
파일: main.cpp 프로젝트: albf/graph3d
int main(int argc, char** argv) {
    // Read command lines arguments.
    QApplication application(argc, argv);
    srand(time(NULL));
    float x, y, z;
    int i, j;

    // Instantiate the viewer.
    Viewer viewer;

    // build your scene here

    // add sea floor
    viewer.addRenderable(new seaFloor());


    //viewer.addRenderable(new LightsMaterials());

    // #1 Group of FishB
    x = 0;
    y = 0;
    z = 0;
    for (i = 0; i < 4; i++)
        for (j = 0; j < 4; j++)
            viewer.addRenderable(new fishB(x + (i * 1.2), y + j, z,
                0.1, 0, 0,
                0.8, 0.2, 0.2));

    // #2 Group of FishB
    x = -5;
    y = -1;
    z = 17;
    for (i = 0; i < 3; i++)
        for (j = 0; j < 5; j++)
            viewer.addRenderable(new fishB(x - (3.2 * 0.05 * i / 0.17), y + j + (3.2 * 0.07 * i / 0.17), z - (3.2 * 0.05 * i / 0.17),
                -0.05, 0.07, -0.05,
                0.2, 0.8, 0.2));


    // #3 Some Crabs
    viewer.addRenderable(new crab(0, 0, 0.04, 0.02));
    viewer.addRenderable(new crab(0, +15, 0.01, 0.04));
    viewer.addRenderable(new crab(0, +20, 0.02, 0.01));
    viewer.addRenderable(new crab(-5, 2, -0.03, 0.01));
    viewer.addRenderable(new crab(-10, -4, +0.02, -0.04));
    viewer.addRenderable(new crab(15, 2, +0.07, 0.01));



    // #4 Group of FishB
    x = -5;
    y = 1;
    z = 1;
    for (i = 0; i < 3; i++)
        for (j = 0; j < 2; j++)
            viewer.addRenderable(new fishB(x + (i * (1.3)), y + j, z,
                0.3, 0.05, 0.01,
                -0.8, 0.2, 0.2));


    // #5 Group of FishB
    x = -10;
    y = -12;
    z = -3;
    for (i = 0; i < 4; i++)
        for (j = 0; j < 4; j++)
            viewer.addRenderable(new fishB(x + (i * (1.2)), y + j, z,
                0.1, 0, 0,
                0.8, 0.2, 0.2));


    // #6 Different Fish
    viewer.addRenderable(new fishA(0, 0, 15,
            -0.07, 0.00, -0.05,
            1, 0, 0));

    viewer.addRenderable(new fishA(0, 1, 25,
            -0.09, 0.00, -0.05,
            0.1, 0.6, 0.3));

    viewer.addRenderable(new fishA(6, -2, 0,
            0.01, +0.01, -0.05,
            0.3, 0.2, 0.7));
    viewer.addRenderable(new fishA(-16,+4, -5,
                                    -0.01,0.00, +0.1,
                                    1,1,1));
    
    viewer.addRenderable(new fishA(-25,-1,-7,
                                    0.0 ,0.04, +0.08,
                                    1,1,0));
    
    
    // #7 Diver and Bubbles : added inside viewer, following lines are for debug only
    
    //viewer.addRenderable(new Diver(5));
    //viewer.addRenderable(new Bubble(0, 0, 20, 0.5, 0.1));
    
    // #8 Pacman
    // added in the viewer, after some time has passed 
    
    // #9 Lights
    // Simples lights.
    viewer.addRenderable(new Light());
    
    
    // Make the viewer window visible on screen.
    viewer.setWindowTitle("Graphic 3D Projet");
    viewer.show();
    viewer.resize(800, 800);

    // Run main loop.
    return application.exec();
}