#ifndef STRUCTURES_H_INCLUDED
#define STRUCTURES_H_INCLUDED


typedef struct Coordonnees Coordonnees;
struct Coordonnees
{
    double x;
    double y;
    double z;
};

typedef struct Vecteur Vecteur;
struct Vecteur
{
    double x;
    double y;
    double z;
};

typedef struct Couleur Couleur;
struct Couleur
{
    int r;
    int g;
    int b;
};

typedef struct Camera Camera;
struct Camera
{
    Coordonnees location;
    Coordonnees lookAt;
};

typedef struct Lumiere Lumiere;
struct Lumiere
{
    Coordonnees location;
    Couleur couleur;
};

typedef struct Background Background;
struct Background
{
    Couleur couleur;
};

typedef struct Plan Plan;
struct Plan
{
    Vecteur vecteurNormal;
    double hauteur;
    Couleur couleur;
};

typedef struct Box Box;
struct Box
{
    Coordonnees point1;
    Coordonnees point2;
    Couleur couleur;
};

typedef struct Sphere Sphere;
struct Sphere
{
    Coordonnees centre;
    double rayon;
    Couleur couleur;
};

typedef struct Cylindre Cylindre;
struct Cylindre
{
    Coordonnees centre1;
    Coordonnees centre2;
    double rayon;
    Couleur couleur;
};

typedef struct Cone Cone;
struct Cone
{
    Coordonnees centre1;
    double rayon1;
    Coordonnees centre2;
    double rayon2;
    Couleur couleur;
};

typedef struct Torus Torus;
struct Torus
{
    Coordonnees position;
    double rayon1;
    double rayon2;
    Couleur couleur;
};


typedef struct RepertoireDObjets RepertoireDObjets;
struct RepertoireDObjets
{
    int nbCamera;
    int nbLumiere;
    int nbBackground;
    int nbPlan;
    int nbBox;
    int nbSphere;
    int nbCylindre;
    int nbCone;
    int nbTorus;
    Camera *camera;
    Lumiere *lumiere;
    Background *background;
    Plan *plan;
    Box *box;
    Sphere *sphere;
    Cylindre *cylindre;
    Cone *cone;
    Torus *torus;
};


typedef struct Rayon Rayon;
struct Rayon
{
    Coordonnees origine;
    Vecteur direction;
};



typedef enum TypeObjet TypeObjet;
enum TypeObjet
{
    RIEN, PLAN, BOX, SPHERE, CYLINDRE, CONE, TORUS
};

typedef struct Objet Objet;
struct Objet
{
    TypeObjet type;
    int index;
};





#endif // STRUCTURES_H_INCLUDED




