 
 
    
    
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