예제 #1
0
        public Vector3 Trace(Ray ray, Sphere sphere)
        {
            Vector3 ambient = new Vector3(0.2f, 0.8f, 0.5f);
            Hit     hit     = new Hit();

            if (sphere.Intersect(ray, ref hit, 0.001f))
            {
                Vector3 LightDir = _lightPosition - hit._point;
                LightDir.Normalize();
                float attenuation = 1f / (LightDir.Length * LightDir.Length);
                LightDir.Normalize();
                return(attenuation * DiffuseLighting(hit._normal, LightDir));
            }
            return(ambient);
        }
예제 #2
0
        public Vector3 Trace(Ray ray, Sphere sphere)
        {
            Vector3 ambient = new Vector3(0f, 0f, 0f);
            Hit     hit     = new Hit();

            if (sphere.Intersect(ray, ref hit, 0.001f))
            {
                Vector3 lightDir = lightPosition - hit.point;
                lightDir.Normalize();
                float attenuation = 1f / (lightDir.length * lightDir.length);

                Vector3 lightDir2 = lightPosition2 - hit.point;
                lightDir2.Normalize();
                float attenuation2 = 1f / (lightDir2.length * lightDir2.length);

                return(attenuation * DiffuseLighting(hit.normal, lightDir) + attenuation2 * DiffuseLighting2(hit.normal, lightDir2));
            }

            return(ambient);
        }