/* Auteur: Nicolas JANEY */ /* nicolas.janey@univ-fcomte.fr */ /* Octobre 2005 */ /* Classe de gestion */ /* d'une lumiere ponctuelle */ #include "LumierePonctuelle.h" #include "Position.h" #include "Direction.h" #include "Materiel.h" #include "Energie.h" LumierePonctuelle::LumierePonctuelle(void) : Lumiere(false,new Couleur(),0.0F) { this->p = new Position(); } LumierePonctuelle::LumierePonctuelle(bool on, Couleur *c, float e, Position *p) : Lumiere(on,new Couleur(c),e) { this->p = new Position(p); } LumierePonctuelle::LumierePonctuelle(LumierePonctuelle *l) : Lumiere(l->on,new Couleur(l->c),l->e){ this->p = new Position(l->p); } LumierePonctuelle::~LumierePonctuelle(void){ delete(c); delete(p); } Energie *LumierePonctuelle::intensiteRecue(Position *pt) { Energie *res = new Energie(); float l = p->distance(pt); if ( l != 0 ) { l = e/(l*l); res->r = l * c->r; res->v = l * c->v; res->b = l * c->b; } return(res); } Energie *LumierePonctuelle::energieDiffusee(Position *pt, Direction *n, Materiel *m) { Energie *res = new Energie(); Direction *i = new Direction(pt,p); i->normalise(); float ps = n->produitScalaire(i); delete(i); if ( ps > 0.0F ) { Energie *ip = intensiteRecue(pt); res->r = ip->r*m->kd->r*ps; res->v = ip->v*m->kd->v*ps; res->b = ip->b*m->kd->b*ps; delete(ip); } return(res); }