/* Stockage d'une lumiere directionnelle */ /* */ /* Auteur: Nicolas JANEY */ /* nicolas.janey@univ-fcomte.fr */ /* Novembre 2012 */ #include #include #include #include "LumiereDirectionnelle.h" #include "Direction3D.h" #include "Energie.h" #include "Couleur.h" /* Constructeurs */ LumiereDirectionnelle::LumiereDirectionnelle(void):Lumiere() { d = new Direction3D(0.0,0.0,-1.0); } LumiereDirectionnelle::LumiereDirectionnelle(LumiereDirectionnelle *ld):Lumiere(ld) { d = new Direction3D(ld->d); } /* Destructeur */ LumiereDirectionnelle::~LumiereDirectionnelle(void) { delete(d); } ////////////////////////////////////////////// /* Methode de calcul de la quantite */ /* d'energie diffusee en un point p */ /* de normale n et de coefficient */ /* de diffusion kd */ void LumiereDirectionnelle::energieDiffusee(Energie *e,Position3D *p,Direction3D *n,Couleur *kd) { if ( !on ) { e->r = 0.0; e->v = 0.0; e->b = 0.0; return; } Direction3D *nm = new Direction3D(n); Direction3D *dm = new Direction3D(d); nm->normalisation(); dm->normalisation(); double ps = nm->produitScalaire(dm); delete(nm); delete(dm); if ( ps < 0.0 ) { e->r = 0.0; e->v = 0.0; e->b = 0.0; } else { e->r = intensite*c->r*ps*kd->r; e->v = intensite*c->v*ps*kd->v; e->b = intensite*c->b*ps*kd->b; } } ////////////////////////////////////////////// /* Methode d'affichage texte */ void LumiereDirectionnelle::print(void) { Lumiere::print(); printf(" - "); d->print(); }