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); }
public Spectrum GetIlluminance(Point3D point, MVertexIlluminanceMode mode, MVertexIlluminanceApproximationMode approximationMode) { return(GetIlluminance(new Vector(Point, point, true), mode, approximationMode)); }