Exemplo n.º 1
0
 public LightPhong(PhongShading phongShading, Light light)
 {
     _l                = Vector3.Normalize(light.Position - phongShading._hit);
     _n                = phongShading._n;
     _light            = light;
     _mat              = phongShading._mat;
     _eh               = phongShading._eh;
     _hit              = phongShading._hit;
     _shadow           = Shadow(phongShading._rayTracing);
     _localCoordiantes = phongShading._localCoordinates;
     _isLightProbe     = phongShading._isLightProbe;
     _dotNL            = Vector3.Dot(_l, _n);
 }
Exemplo n.º 2
0
        public Vector3 CalcColorRayTracing(Ray ray, int recursionCount = 0)
        {
            (var hit, var obj, _) = FindClosestHitPoint(ray);
            if (!hit.HasValue)
            {
                return(Colors.Black.ToVector3());
            }

            var Id = Vector3.Zero;
            var Is = Vector3.Zero;
            var Ir = Vector3.Zero;

            var phongShading = new PhongShading(obj, hit.Value, ray, this);

            foreach (var light in _scene.Lights)
            {
                var pLight = phongShading.LightShading(light);

                if (UseDiffues)
                {
                    Id += pLight.Diffuse();
                }
                if (UseSpecular)
                {
                    Is += pLight.Specular();
                }
            }

            if (UseReflection)
            {
                if (recursionCount < 3 && obj.Material.Kreflection > 0)
                {
                    (var kr, var reflectRay) = phongShading.KrAndReflectRay();

                    Ir = CalcColorRayTracing(reflectRay, recursionCount + 1) * kr;
                }
            }

            return(_scene.EnviromentLight + Ir + Is + Id);
        }