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); }
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); }