/* Scene composee de spheres et de lumieres     */
/*                                              */
/* Auteur: Nicolas JANEY                        */
/* nicolas.janey@univ-fcomte.fr                 */
/* Mars 2014                                    */

#ifndef ____SCENE____
#define ____SCENE____

class Objet;
class Lumiere;
class RayonLumineux;
class Couleur;
class Energie;
class Pos3D;
class Dir3D;

class Scene  {

  public :
    int nbObjets;
    Objet **objets;
    int nbLumieres;
    Lumiere **lumieres;

  public :
    Scene(void);
    Scene(Scene *c);
    ~Scene(void);

    void add(Objet *o);
    void add(Lumiere *l);
    void print(void);

    /* Test de l'intersection d'un rayon d'ombre    */
    /* avec l'ensemble des objets d'une scene.      */
    int intersection(RayonLumineux *rl);

    /* Test de l'intersection d'un rayon d'ombre    */
    /* avec l'ensemble des objets d'une scene.      */
    /* Les intersections candidates sont limitees   */
    /* a celles situees a une distance de la source */
    /* du rayon inferieure a la distance limite d.  */
    int intersection(RayonLumineux *rl,double d);

    /* Fonction de calcul de la quantite d'energie  */
    /* diffusee en un point d'une sphere            */
    /* sous l'eclairage de l'ensemble des sources   */
    /* lumineuses d'une scene                       */
    void calculDiffusion(Energie *e,Pos3D *p,Dir3D *n,Couleur *kd);
    
    void rayTracing(Energie *e,RayonLumineux *rl,int niveau,double indiceRefraction,int exterieur,long *nbRayons,long *nbRayonsOmbre);
};

#endif
