Sphère éclairée par une lumière ponctuelle en pur OpenGL à gauche, en utilisant le calcul de diffusion "maison"
Sphère éclairée par une lumière directionnelle en pur OpenGL à gauche, en utilisant le calcul de diffusion "maison"
Fichier source : DiffusionsLambertiennes.cpp
/* Methode de calcul de la quantite */
/* d'energie diffusee en un point p */
/* de normale n et de coefficient */
/* de diffusion kd */
virtual void energieDiffusee(Energie *e,Position3D *p,Direction3D *n,Couleur *kd);
/* Methode de calcul de la quantite */
/* d'energie diffusee en un point p */
/* de normale n et de coefficient */
/* de diffusion kd */
void Lumiere::energieDiffusee(Energie *e,Position3D *p,Direction3D *n,Couleur *kd) {
}
Fichier source : LumiereDirectionnelle.h
/* Methode de calcul de la quantite */
/* d'energie diffusee en un point p */
/* de normale n et de coefficient */
/* de diffusion kd */
virtual void energieDiffusee(Energie *e,Position3D *p,Direction3D *n,Couleur *kd);
Fichier source : LumiereDirectionnelle.cpp
/* 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; }
}
Fichier source : LumierePonctuelle.h
/* Methode de calcul de la quantite */
/* d'energie diffusee en un point p */
/* de normale n et de coefficient */
/* de diffusion kd */
virtual void energieDiffusee(Energie *e,Position3D *p,Direction3D *n,Couleur *kd);
Fichier source : LumierePonctuelle.cpp
/* Methode de calcul de la quantite */
/* d'energie diffusee en un point p */
/* de normale n et de coefficient */
/* de diffusion kd */
void LumierePonctuelle::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(p,this->p);
nm->normalisation();
double dist = 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;
if ( attenuation ) {
e->r /= (dist*dist);
e->v /= (dist*dist);
e->b /= (dist*dist); } }
}