public override Spectrum SampleL(Scene scene, LightSample ls, float u1, float u2, float time, out Ray ray, out Normal ns, out float pdf) { ray = new Ray(_lightPosition, MonteCarloUtilities.UniformSampleSphere(ls.UPos0, ls.UPos1), 0.0f, float.PositiveInfinity, time); ns = (Normal)ray.Direction; pdf = MonteCarloUtilities.UniformSpherePdf(); return(_intensity); }
public override Point Sample(float u1, float u2, out Normal ns) { Point p = new Point(0, 0, 0) + _radius * MonteCarloUtilities.UniformSampleSphere(u1, u2); ns = Normal.Normalize(ObjectToWorld.TransformNormal(new Normal(p.X, p.Y, p.Z))); if (ReverseOrientation) { ns *= -1.0f; } return(ObjectToWorld.TransformPoint(ref p)); }