/* Stockage d'une lumiere directionnelle */ /* */ /* Auteur: Nicolas JANEY */ /* nicolas.janey@univ-fcomte.fr */ /* Novembre 2012 */ #include #include #include #include "LumiereDirectionnelle.h" #include "Dir3D.h" #include "Energie.h" #include "Couleur.h" /* Constructeurs */ LumiereDirectionnelle::LumiereDirectionnelle(void):Lumiere() { d = new Dir3D(0.0,0.0,-1.0); } LumiereDirectionnelle::LumiereDirectionnelle(LumiereDirectionnelle *ld):Lumiere(ld) { d = new Dir3D(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,Pos3D *p,Dir3D *n,Couleur *kd) { if ( !on ) { e->r = 0.0; e->v = 0.0; e->b = 0.0; return; } Dir3D nm(n); Dir3D dm(d); nm.normalisation(); dm.normalisation(); double ps = nm.produitScalaire(&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(); }