Rayon CameraPinhole::genererRayon(int x, int y) const { // calcule la direction dans le repere monde Vecteur2 uv = imageVersEcran(x, y); Vecteur3 uvw = ecranVersCamera(uv); Vecteur3 direction = cameraVersMonde(uvw); direction.normer(); // retourne le rayon return Rayon(_position, direction); }
bool LumierePoint::calculerEclairement(const Intersection &intersection, const Scene &scene, Eclairement &eclairement) const { // calcule la direction de la lumiere Vecteur3 L = _position - intersection._position; reel distance = L.calculerNorme(); L.normer(distance); // teste si la lumiere est visible Rayon rayonLumiere(intersection._position, L); rayonLumiere.avancer(); bool visible = scene.visibilite(rayonLumiere, distance); // initialise l'eclairement if (visible) { eclairement._couleur = _couleur; eclairement._incidence = L; } return visible; }