Sphère éclairée par une lumière ponctuelle en pur OpenGL à gauche, en utilisant le calcul de diffusion "maison" à droite
Sphère éclairée par une lumière directionnelle en pur OpenGL à gauche, en utilisant le calcul de diffusion "maison" à droite
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,Pos3D *p,Dir3D *n,Couleur *kd) = 0;
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,Pos3D *p,Dir3D *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,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; }
}
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,Pos3D *p,Dir3D *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,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(p,this->p);
nm.normalisation();
double dist = 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;
if ( attenuation ) {
e->r /= (dist*dist);
e->v /= (dist*dist);
e->b /= (dist*dist); } }
}
Fichier source : Rvb.h
Fichier source : Rvb.cpp
Fichier source : Couleur.h
Fichier source : Couleur.cpp
Fichier source : Energie.h
Fichier source : Energie.cpp