L'exécutable

 

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

Fichier source : Lumiere.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) = 0;

Fichier source : Lumiere.cpp

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

Fichiers sources : Mathematiques.zip

RETOUR