Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • 027aa69c4101d2c3b63cc577f18735ee83562614
  • master par défaut protégée
2 résultats

main.cpp

Blame
  • main.cpp 4,52 Kio
    #include "camera.h"
    #include "quad.h"
    #include "sphere.h"
    #include "scene.h"
    
    #include <iostream>
    #include <string>
    
    
    
    void test_Vector3f()
    {
    	std::cout << "----- TEST Vector3f -----" << std::endl;
    
    	Vector3f a(1, 3, 1);
    	std::cout << "a=" << a << std::endl;
    
    	Vector3f b(a);
    	std::cout << "b=" << b << std::endl;
    
    	b = Vector3f(2, 2, 2);
    	std::cout << "b=" << b << std::endl;
    
        Vector3f k=a^b;
    
    	std::cout << "a+b=" << a+b << std::endl;
    	std::cout << "a-b=" << a-b << std::endl;
    	std::cout << "a*b=" << a*b << std::endl;
    	std::cout << "a^b=" << k   << std::endl;
    	//std::cout << "b*2=" << b*2 << std::endl;
    	std::cout << "2*b=" << 2*b << std::endl;	
    	std::cout << "b/2=" << b/2 << std::endl;
    	std::cout << "norme de b = " << b.norm() << std::endl;
    
    	std::cout << std::endl << std::endl;
    }
    
    
    void test_Ray3f()
    {
    	std::cout << "----- TEST Ray3f -----" << std::endl;
    
    	Ray3f r(Vector3f(0,0,0), Vector3f(1,-2,0));
    	std::cout << "r" << std::endl << r << std::endl;
    
    	Ray3f u = Ray3f(r);
    	std::cout << "u" << std::endl << u << std::endl;
    
    	std::cout << std::endl << std::endl;
    }
    
    
    void test_Camera()
    {
    	std::cout << "----- TEST Camera -----" << std::endl;
    
    	Camera c(Vector3f(0,0,0), Vector3f(1,-2,0));
    	std::cout << "c" << std::endl << c << std::endl;
    
    	Camera u = Camera(c);
    	std::cout << "u" << std::endl << u << std::endl;
    
    	std::cout << std::endl << std::endl;
    }
    
    
    void test_Material()
    {
    	std::cout << "----- TEST Material -----" << std::endl;
    
    	Material a(-10,15,205,0.5);
    
    	std::cout << "a" << std::endl << a << std::endl;
    
    	std::cout << std::endl << std::endl;
    }
    
    
    void test_Quad()
    {
    	std::cout << "----- TEST Quad -----" << std::endl;
    
    	Material matter(-10, 15, 205, 0.5);
    	Quad q(matter, Vector3f(), 5, 5, 5);
    
    	std::cout << "q" << std::endl << q << std::endl;
    
    	std::cout << std::endl << std::endl;
    }
    
    
    void test_Sphere()
    {
    	std::cout << "----- TEST Sphere -----" << std::endl;
    
    	Material matter(-10, 15, 205, 0.7);
    	Sphere s(matter, Vector3f(), 5);
    
    	std::cout << "s" << std::endl << s << std::endl;
    
    	std::cout << std::endl << std::endl;
    }
    
    
    void test_Scene()
    {
    	std::cout << "----- TEST Scene -----" << std::endl;
    
    	Camera c(Vector3f(0,0,0), Vector3f(1,5,0));
    
    	Material matter(-10, 15, 205, 0.7);
    	Shape *tab[3];
    	tab[0] = new Quad(matter, Vector3f(), 5, 5, 5);
    	tab[1] = new Sphere(matter, Vector3f(), 5);
    	tab[2] = new Sphere(matter, Vector3f(), 5);
    
    	Ray3f source(Vector3f(10,10,10), Vector3f(1,-2,0));
    
    
    	Scene scene(c, tab, source);
    
    	//std::cout << "scene" << std::endl << scene << std::endl;
    
    	std::cout << std::endl << std::endl;
    }
    
    
    
    int main()
    {
    	try
    	{
    		//----------TESTS----------
    		/*test_Vector3f();
    		test_Ray3f();
    		test_Camera();
    		test_Material();
    		test_Quad();
    		test_Sphere();
    		test_Scene();*/
    
    
    		//----------MISE EN PLACE DE LA SCENE----------
    		Material red(255, 0, 0, 0);
    		Material green(0, 255, 0, 0);
    		Material blue(0, 0, 255, 0);
    		Material yellow(255, 255, 0, 0);
    		Material magenta(255, 0, 255, 0);
    		Material cyan(0, 255, 255, 0);
    		Material white(255, 255, 255, 0);
    		Material grey(122, 122, 122, 0);
    		Material black(0, 0, 0, 0);
    
    		int nb_shapes = 7;
    		float width = 100; //x
    		float height = 100; //y
    		float depth = 100; //z
    
    		/*	   y
    			   ^
    		       |
    		       |
    		x <----X z*/
    		Shape *shapes[nb_shapes];
    		shapes[0] = new Quad(yellow, Vector3f(width/2, height/2, depth), width, height, 0); //mur du fond
    		shapes[1] = new Quad(magenta, Vector3f(width, height/2, depth/2), 0, height, depth); //mur gauche
    		shapes[2] = new Quad(white, Vector3f(width/2, height, depth/2), width, 0, depth); //plafond
    		shapes[3] = new Quad(cyan, Vector3f(0, height/2, depth/2), 0, height, depth); //mur droit
    		shapes[4] = new Quad(grey, Vector3f(width/2, 0, depth/2), width, 0, depth); //sol
    		shapes[5] = new Quad(red, Vector3f(width/4, 20, depth-20), 40, 40, 40); //cube
    		shapes[6] = new Sphere(blue, Vector3f(3/4*width, 20, depth/2), 40); //sphere
    
    		Camera camera(Vector3f(width/2, height/2, -1), Vector3f(0, 0, 1)); //on met la caméra un peu en recul
    		Ray3f source(Vector3f(width/2, height, depth/2), Vector3f(0, -1, 0)); //lumière au plafonc
    		Scene scene(camera, shapes, source);
    
    
    		//----------CALCUL ET SAUVEGARDE DE L'IMAGE----------
    		std::cout << "Création de l'image..." << std::endl;
    		std::string filename = "0.png";
    		scene.render(width, height, 640, 480, nb_shapes, (char *) filename.c_str());
    		std::cout << "Image sauvegardée" << std::endl;
    
    		//----------LIBERATION DE LA MEMOIRE----------
    		for (int i=0; i<nb_shapes; i++)
    			delete [] shapes[i];
    	}
    
    	catch (const char* s)
    	{
    		std::cout << std::endl << "ERROR : " << s << std::endl;
    		return 1;
    	}
    
    	return 0;
    }