public override PointColore GetCouleurIntersect(V3 camera, V3 directionOculaire, float intersection) { V3 point = new V3(camera + intersection * directionOculaire); V3 AI = new V3(point - position); float beta = (AI * AC) / (AC.Norm() * AC.Norm()); float alpha = (AI * AB) / (AB.Norm() * AB.Norm()); V3 dMdu = AB; V3 dMdv = AC; float dhdu, dhdv; BumpMap.Bump(alpha, beta, out dhdu, out dhdv); V3 T2 = dMdu ^ (dhdv * normal); V3 T3 = (dhdu * normal) ^ dMdv; V3 normaleBump = normal + 0.08f * (T2 + T3); normaleBump.Normalize(); V3 positionCouleur = textureA + (alpha * (textureB - textureA) + beta * (textureC - textureA)); return(new PointColore(point, normaleBump, texture.LireCouleur(positionCouleur.x, positionCouleur.y), this)); }
private Couleur processLumiere(V3 rayon, PointColore point) { V3 normalPoint = point.GetNormale(); //V3 directionOculaire = new V3(camera - point.GetLoc()); //directionOculaire.Normalize(); Couleur lumiereTotale = new Couleur(0, 0, 0); lumiereTotale += point.GetCouleur() * couleurAmbiance * intensiteAmbiance; foreach (Lumiere lampe in lampes) { if (!(lampe.isOccluded(point, objets))) { V3 directionLampeNormale = new V3(lampe.GetDirection(point.GetLoc())); directionLampeNormale.Normalize(); float cosAlpha = normalPoint * directionLampeNormale; float facteurDiffus = Math.Max(0, cosAlpha); lumiereTotale += point.GetCouleur() * lampe.GetCouleur() * facteurDiffus * lampe.GetIntensite(point.GetLoc()); V3 reflet = (2 * cosAlpha * normalPoint) - directionLampeNormale; float produitSpeculaire = Math.Max(0, (reflet * (-rayon)) / (reflet.Norm() * rayon.Norm())); float facteurSpeculaire = (float)Math.Pow(produitSpeculaire, puissanceSpeculaire); lumiereTotale += lampe.GetCouleur() * lampe.GetIntensite(point.GetLoc()) * facteurSpeculaire; } } return(lumiereTotale); }