示例#1
0
        //récupère la couleur du pixel en prenant compte des lumières de la scène
        public Couleur CouleurEclairee(V3 position, V3 normal, Couleur couleurDeBase, Materiel mat, Objet3D ObjetToDraw)
        {
            //initialisation de la couleur
            Couleur couleurFinale = new Couleur(0, 0, 0);


            //---------------------------Lumiere AMBIANTE----------------------------------//
            if (LumAmb != null)
            {
                couleurFinale += new Couleur(couleurDeBase * LumAmb.Couleur);
            }

            if (Lumieres.Count > 0)
            {
                foreach (Lumiere l in Lumieres)
                {
                    V3 DirectionLumiere = l.getDirection(position);
                    DirectionLumiere.Normalize();



                    if (!CheckIfObjectBetweenLightSource(DirectionLumiere, position, ObjetToDraw))
                    {
                        //Console.WriteLine("Je dessine la lumière");
                        //-------------------------------Lumiere DIFFUSE------------------------------------//
                        float diff = Math.Max((DirectionLumiere * normal), 0);
                        couleurFinale += new Couleur((couleurDeBase * l.getCouleur()) * diff);

                        //--------------------------------Reflet SPECULAIRE--------------------------------//
                        float forceSeculaire            = mat.GetForceSpeculaire();
                        V3    positionOeil              = new V3(BitmapEcran.GetHeight() / 2, -3000, BitmapEcran.GetWidth() / 2);
                        V3    directionDuRayonReflechis = new V3(2 * normal - DirectionLumiere);
                        directionDuRayonReflechis.Normalize();
                        V3 directionObservateur = new V3(positionOeil - position);
                        directionObservateur.Normalize();

                        couleurFinale += new Couleur(l.getCouleur() * (float)Math.Pow((directionDuRayonReflechis * directionObservateur), forceSeculaire));
                    }
                }
            }
            return(couleurFinale);
        }