Example #1
0
        private Vector3 ShadeRec(Vector3 V, RTLight lgt, IntersectionRecord rec)
        {
            RTMaterial m = mSceneDatabase.GetMaterial(rec.MaterialIndex);
            Vector3    r = Vector3.Zero;

            float percentToUse = 1f;

            if (mComputeShadow)
            {
                percentToUse = lgt.PercentVisible(rec.IntersectPosition, rec.GeomIndex, mSceneDatabase);
            }

            if (percentToUse > 0f)
            {
                Vector3 L     = lgt.GetNormalizedDirection(rec.IntersectPosition);
                float   NdotL = Vector3.Dot(rec.NormalAtIntersect, L);

                if (NdotL > 0)
                {
                    Vector3 diffColor  = m.GetDiffuse(mSceneDatabase, rec);
                    Vector3 lightColor = percentToUse * lgt.GetColor(rec.IntersectPosition);
                    r += diffColor * NdotL * lightColor;

                    Vector3 R     = 2 * NdotL * rec.NormalAtIntersect - L;
                    float   VdotR = Vector3.Dot(V, R);

                    if (VdotR > 0)
                    {
                        r += m.GetSpecular(mSceneDatabase, rec) * (float)Math.Pow(VdotR, m.GetN) * lightColor;
                    }
                }
            }

            return(r);
        }
        private Vector3 ShadeRec(Vector3 V, RTLight lgt, IntersectionRecord rec)
        {
            RTMaterial m = mSceneDatabase.GetMaterial(rec.MaterialIndex);
            Vector3 r = Vector3.Zero;

            float percentToUse = 1f;
            if (mComputeShadow)
                percentToUse = lgt.PercentVisible(rec.IntersectPosition, rec.GeomIndex, mSceneDatabase);

            if (percentToUse > 0f)
            {
                Vector3 L = lgt.GetNormalizedDirection(rec.IntersectPosition);
                float NdotL = Vector3.Dot(rec.NormalAtIntersect, L);

                if (NdotL > 0)
                {
                    Vector3 diffColor = m.GetDiffuse(mSceneDatabase, rec);
                    Vector3 lightColor = percentToUse * lgt.GetColor(rec.IntersectPosition);
                    r += diffColor * NdotL * lightColor;

                    Vector3 R = 2 * NdotL * rec.NormalAtIntersect - L;
                    float VdotR = Vector3.Dot(V, R);

                    if (VdotR > 0)
                        r += m.GetSpecular(mSceneDatabase, rec) * (float)Math.Pow(VdotR, m.GetN) * lightColor;
                }
            }

            return r;
        }