Module imp3d

Class SpotLight

All Implemented Interfaces:
Raytraceable, Light, Scattering, Manageable, Shareable, Emitter, Light, Scattering

public class SpotLight extends PointLight implements Raytraceable
This class implements a spot light. Light rays are cast from the local origin, the central direction of the spot light is the local z-axis. Light rays with an angle α to the z-axis less than innerAngle have a maximal intensity, the intensity falls off to zero when the angle reaches outerAngle. The fall-off is governed by a cubic spline: Let
t = (cos α - cos outerAngle) / (cos innerAngle - cos outerAngle)
then the interpolation factor is
(3 - 2 t) t2
Author:
Ole Kniemeyer
  • Field Details

  • Constructor Details

    • SpotLight

      public SpotLight()
  • Method Details

    • getManageableType

      public ManageableType getManageableType()
      Specified by:
      getManageableType in interface Manageable
      Overrides:
      getManageableType in class PointLight
    • getInnerAngle

      public float getInnerAngle()
    • setInnerAngle

      public void setInnerAngle(float value)
    • getOuterAngle

      public float getOuterAngle()
    • setOuterAngle

      public void setOuterAngle(float value)
    • draw

      protected void draw(Tuple3f color, RenderState rs)
      Overrides:
      draw in class PointLight
    • generateRandomRays

      public void generateRandomRays(Environment env, Vector3f out, Spectrum specOut, RayList rays, boolean photon, Random rnd)
      Description copied from interface: Scattering
      Pseudorandomly generates, for the given input, a set of scattered rays. The scattered rays are generated such that they can be used for a Monte Carlo integration of a function f(ω;ν) over cos θ BSDF(ωi, νi; ωo, νo) in the following way:
      • If adjoint is false, out = ωo describes the direction of an outgoing light ray. In this case, the integration is with respect to ωi. Let g(ω, ν; out, μ) = BSDF(ω, ν; out, μ)
      • Otherwise, adjoint is true. In this case, out = ωi describes the direction of an outgoing importance ray (an inverse light ray). Now the integration is with respect to ωo. Let g(ω, ν; out, μ) = BSDF(out, μ; ω, ν)
      Let di and si denote the directions and spectra of the N generated rays (N = rays.size). Then, for every frequency ν the sum
      1 / N ∑i si(ν) f(di; ν)
      is an unbiased estimate for the integral
      ∫ cos θ f(ω; ν) g(ω, ν; out, μ) specOut(μ) dμ dω
      θ is the angle between the surface normal and ω. The domain of integration is the whole sphere, since the bidirectional scattering distribution includes both reflection and transmission (BSDF = BRDF + BTDF).

      If this Scattering instance is in fact a Light source, adjoint is true, and the BSDF is defined as BSDF(out, μ; ω, ν) = L1(ω, ν) δ(μ - ν), i.e., the directional distribution of the emitted radiance at env.point, see Emitter. In this case, out is not used.

      If this Scattering instance is in fact a Sensor, adjoint is false, and the BSDF is defined as BSDF(ω, ν; out, μ) = W1(ω, ν) δ(μ - ν), i.e., the directional distribution of the emitted importance at env.point, see Emitter. In this case, out is not used.

      Let pω be the probability density used for the ray direction (measured with respect to solid angle ω), then the field directionDensity of the ray i is set to pω(di). For ideal specular reflection or transmission, or for directional lights or sensors, pω is not a regular function, the value directionDensity will be set to a multiple of Scattering.DELTA_FACTOR.

      The ray properties which are not mentioned in the given formulas are neither used nor modified. These are the origin and its density.

      Specified by:
      generateRandomRays in interface Scattering
      Overrides:
      generateRandomRays in class PointLight
      Parameters:
      env - the environment for scattering
      out - the direction unit vector of the outgoing ray (i.e., pointing away from the surface)
      specOut - the spectrum of the outgoing ray
      rays - the rays to be generated
      photon - represents out a light ray or an importance ray?
      rnd - pseudorandom generator
      See Also:
    • getDensityAt

      protected float getDensityAt(Vector3f direction)
      Overrides:
      getDensityAt in class PointLight
    • createRaytracerLeaf

      public RaytracerLeaf createRaytracerLeaf(Object object, boolean asNode, long pathId, GraphState gs)
      Specified by:
      createRaytracerLeaf in interface Raytraceable
      Overrides:
      createRaytracerLeaf in class PointLight
    • accept

      public void accept(LightVisitor visitor)
      Specified by:
      accept in interface Light
      Overrides:
      accept in class PointLight