示例#1
0
        public Spectrum GetIlluminance(Vector direction, MVertexIlluminanceMode mode, MVertexIlluminanceApproximationMode approximationMode)
        {
            Spectrum result = new Spectrum(0);

            if (Face.Material.Reflectance is DiffuseReflectanceMaterial)
            {
                if (mode == MVertexIlluminanceMode.Full || mode == MVertexIlluminanceMode.Direct)
                {
                    result += IlluminanceDirect[0];
                }

                if (mode == MVertexIlluminanceMode.Full || mode == MVertexIlluminanceMode.Indirect)
                {
                    result += IlluminanceIndirect[0];
                }
            }
            else
            {
                switch (approximationMode)
                {
                case MVertexIlluminanceApproximationMode.Spline:
                    result = GetIlluminanceBySpline(direction, mode);
                    break;

                case MVertexIlluminanceApproximationMode.SphericalHarmonics:
                    result = GetIlluminanceBySphericalHarmonics(direction, mode);
                    break;

                default:
                    throw new NotImplementedException();
                }
            }

            /*
             * if ( result.R < 0 )
             * {
             *  //return new Spectrum();
             *  return new Spectrum( 1, 0, 0 );
             * }
             */

            return(result);
        }
示例#2
0
 public Spectrum GetIlluminance(Point3D point, MVertexIlluminanceMode mode, MVertexIlluminanceApproximationMode approximationMode)
 {
     return(GetIlluminance(new Vector(Point, point, true), mode, approximationMode));
 }