void generateMesh(Terrain* const t,const QString& obj,int echantillion){

    MeshBuilder bu;
    QString nom="terrain";
    Mesh m =bu.terrain(*t,echantillion,nom);
    bu.saveMesh(obj,m);

}
int main(int argc, char *argv[])
{
    /*int arg=1;
    QTime time;

    float values[9] = {1.0f,2.0f,3.0f,4.0f,5.0f,6.0f,7.0f,8.0f,9.0f};

    Matrix3 mat(values);

    cout << mat << endl;

    cout << mat.transpose() << endl;*/

   /* time.restart();
    QString img=argv[arg++];
    Terrain* t=generationImage(img);
    std::cout << "Terrain from image generated : " << time.restart() << "ms." << std::endl;//*/

     /* time.restart();
      Terrain* t=generationProcedural();
      std::cout << "Terrain generated : " << time.restart() << "ms." << std::endl;
     //*/


    /*time.restart();
    QString obj=argv[arg++];
    generateMesh(t,obj,300);
    std::cout << "Mesh generated : " << time.restart() << "ms." << std::endl;//*/

    /*time.restart();
    QString destination=argv[arg++];
    shoot(t,destination);
    std::cout << "Image generated from ray launching : " << time.restart() << "ms." << std::endl;//*/

   /* time.restart();
    QString destination=argv[arg++];

    shootMulti(t,destination,100);
    std::cout << "100 images generated from ray launching : " << time.restart() << "ms." << std::endl;//*/

    //delete t;

    /*Vector3D centre(1.0f,0.0f,0.0f);
    Vector3D centre2(.5f,.5f,0.0f);

    Vector3D origine(-3.0f,0.0f,0.0f);
    Vector3D direction(1.0f,0.0f,0.0f);

    Vector3D soleil(-10000.0f,0.0f,0.0f);

    CSGSphere sphere(centre, 1.0f);
    CSGSphere sphere2(centre2, 0.75f);


    CSGDifference uni(&sphere,&sphere2);

    Camera cam(origine, direction,1.0);

    QImage result = cam.printScreen(uni, soleil, 900, 900);

    QString nameImage = "C:/Users/etu/Desktop/sphereTest.png";
    result.save(nameImage);



    MeshBuilder mb;
    TableauVoxel tab(500,500,500,10.0/500,Vector3D(-5,-5,-5),uni);
    //TableauVoxel tab(3,3,3,10,Vector3D(0,0,0));
    //tab(1,1,1)=1;
    QString name2 = "C:/Users/etu/Desktop/voxel.obj";
    Mesh m=mb.voxel(tab,name2);
    mb.saveMesh(name2,m);*/

    QList<Vector3D> points = Vector3D::randHemisphere(1000);
    QList<Vector3D> points2 = Vector3D::rotateScaleTranslate(points, Vector3D(0,0,0), 1, Vector3D(0,0.5,0.5).normalized());
    QList<int> topo;
    QList<Vector3D> normales;
    Mesh m1(points, topo, normales, "ololo");
    Mesh m2(points2, topo, normales, "ololo2");

    MeshBuilder m;
    m.saveMesh("m1.obj", m1);
    m.saveMesh("m3.obj", m2);

    return 0;
}