Sélectionner une révision Git
-
Lénaïc DURAND a rédigéLénaïc DURAND a rédigé
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;
}