pour l'instant les matières des objets sont toutes identiques, on ne peut modifier que la couleur de base. ces matières utilisent le modèle de Lambert.

mais toutes les matières ne réfléchissent pas la lumière de la même manière dans toutes les directions. par exemple, on peut créer des reflets plus ou moins concentrés et intenses :






// paramètres de la
matière
Color color;float metal;float alpha;Color fr( const Vector& d, const
Vector& n, const Vector& l ){ // verifie que les
vecteurs sont bien orientes. d vers la camera, l vers la
lumiere assert(dot(n, d)
>= 0); assert(dot(n, l)
>= 0); // calcule h Vector h=
normalize(d+l); // et le cosinus
avec la normale float cos_theta_h=
dot( normalize(n), h ); if(metal)
// pour les metaux
return (alpha+8) / float(8*M_PI) * std::pow(cos_theta_h,
alpha) * color; else
// pour les autres
return color + (alpha+8) / float(8*M_PI) *
std::pow(cos_theta_h, alpha) * White();}// paramètres de
la matière
Color color;Color specular;float alpha;Color fr( const Vector& d, const
Vector& n, const Vector& l ) { // verifie que les
vecteurs sont bien orientes. d vers la camera, l vers la
lumiere assert(dot(n, d)
>= 0); assert(dot(n, l)
>= 0); //
calcule h
Vector h= normalize(d+l); // et
le cosinus avec la normale float
cos_theta_h= dot( normalize(n), h ); return color +
(alpha+8) / float(8*M_PI) * std::pow(cos_theta_h, alpha)
* specular; }