Exemplo n.º 1
0
 public DiskLight(Transformation objectToWorld, float radius = 1, SampledSpectrum spectrum = null)
     : base(objectToWorld, spectrum)
 {
     _radius  = radius;
     _normal  = ObjectToWorld.TransformNormal(new Vector3(0, -1, 0)).Normalized();
     NSamples = (uint)Math.Max(1, _radius / 4f);
 }
Exemplo n.º 2
0
 public override Point Sample(float u1, float u2, out Normal ns)
 {
     var z = MathUtility.Lerp(u1, _zMin, _zMax);
     var t = u2 * _phiMax;
     var p = new Point(_radius * MathUtility.Cos(t), _radius * MathUtility.Sin(t), z);
     ns = Normal.Normalize(ObjectToWorld.TransformNormal(new Normal(p.X, p.Y, 0)));
     if (ReverseOrientation)
         ns *= -1.0f;
     return ObjectToWorld.TransformPoint(ref p);
 }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        public override Point Sample(float u1, float u2, out Normal ns)
        {
            var p = new Point();

            MonteCarloUtilities.ConcentricSampleDisk(u1, u2, out p.X, out p.Y);
            p.X *= _radius;
            p.Y *= _radius;
            p.Z  = _height;
            ns   = Normal.Normalize(ObjectToWorld.TransformNormal(new Normal(0, 0, 1)));
            if (ReverseOrientation)
            {
                ns *= -1.0f;
            }
            return(ObjectToWorld.TransformPoint(ref p));
        }