Ejemplo n.º 1
0
        public Couleur RayCast(V3 PosCamera, V3 DirRayon, List <Objet3D> Objets)
        {
            Couleur c;
            float   t;
            float   tmin            = float.MaxValue;
            Objet3D ObjectAAfficher = null;

            foreach (Objet3D Objet in Objets)
            {
                //Console.WriteLine("OBJET: " + Objet.GetType().ToString());
                t = Objet.gettIntersect(PosCamera, DirRayon);
                //Console.WriteLine("   Distance " + t);
                if (t > 0 && t < tmin)
                {
                    ObjectAAfficher = Objet;
                    tmin            = t;
                }
            }
            //Console.WriteLine("");
            //Console.WriteLine("Distance min: " + tmin );

            if (ObjectAAfficher != null)
            {
                V3 PointIntersection = new V3(PosCamera + tmin * DirRayon);
                c = ObjectAAfficher.getCouleurRaycast(PointIntersection, this);
                return(c);
            }
            else
            {
                c = new Couleur(0.3f, 0.3f, 0.3f);
                return(c);
            }
        }
Ejemplo n.º 2
0
        public Boolean CheckIfObjectBetweenLightSource(V3 DirRayon, V3 OrigineRayon, Objet3D ObjectToDraw)
        {
            float t = -1;

            //Console.WriteLine(" Origine PT: "+ OrigineRayon.x + " " + OrigineRayon.y + " " + OrigineRayon.z+ " Direction Rayon: " + DirRayon.x + " " + DirRayon.y + " " + DirRayon.z);

            foreach (Objet3D Objet in Objets)
            {
                if (Objet != ObjectToDraw)
                {
                    t = Objet.gettIntersect(OrigineRayon, DirRayon);
                    //Console.WriteLine(t);
                    if (t > 0.5f)
                    {
                        //Console.WriteLine("Return TRUE");
                        return(true);
                    }
                }
            }
            //Console.WriteLine("Return FALSE");
            return(false);
        }
Ejemplo n.º 3
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);
        }
Ejemplo n.º 4
0
 //===== Objets =====
 public void AddObjet3D(Objet3D o)
 {
     Objets.Add(o);
 }