Package org.sunflow.core

## Interface LightSource

- All Superinterfaces:
    `RenderObject`
  All Known Implementing Classes:
    `CornellBox`, `DirectionalSpotlight`, `ImageBasedLight`, `PointLight`, `SphereLight`, `SunSkyLight`, `TriangleMeshLight`

      public interface LightSource
      extends RenderObject

  This interface is used to represent any light emitting primitive. It permits efficient sampling of direct illumination and photon shooting.

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `Instance` | `createInstance()` | Create an instance which represents the geometry of this light source.
    `int` | `getNumSamples()` | Get the maximum number of samples that can be taken from this light source.
    `void` | `getPhoton​(double randX1, double randY1, double randX2, double randY2, Point3 p, Vector3 dir, Color power)` | Gets a photon to emit from this light source by setting each of the arguments.
    `float` | `getPower()` | Get the total power emitted by this light source.
    `void` | `getSamples​(ShadingState state)` | Samples the light source to compute direct illumination.

    - ### Methods inherited from interface org.sunflow.core.RenderObject

      `update`

- - ### Method Detail

    - #### getNumSamples

          int getNumSamples()

      Get the maximum number of samples that can be taken from this light source. This is currently only used for statistics reporting.
      Returns:
        maximum number of samples to be taken from this light source

    - #### getSamples

          void getSamples​(ShadingState state)

      Samples the light source to compute direct illumination. Light samples can be created using the `LightSample` class and added to the current `ShadingState`. This method is responsible for the shooting of shadow rays which allows for non-physical lights that don't cast shadows. It is recommended that only a single shadow ray be shot if `ShadingState.getDiffuseDepth()` is greater than 0. This avoids an exponential number of shadow rays from being traced.
      Parameters:
        `state` - current state, including point to be shaded
      See Also:
        `LightSample`

    - #### getPhoton

          void getPhoton​(double randX1,
                         double randY1,
                         double randX2,
                         double randY2,
                         Point3 p,
                         Vector3 dir,
                         Color power)

      Gets a photon to emit from this light source by setting each of the arguments. The two sampling parameters are points on the unit square that can be used to sample a position and/or direction for the emitted photon.
      Parameters:
        `randX1` - sampling parameter
        `randY1` - sampling parameter
        `randX2` - sampling parameter
        `randY2` - sampling parameter
        `p` - position to shoot the photon from
        `dir` - direction to shoot the photon in
        `power` - power of the photon

    - #### getPower

          float getPower()

      Get the total power emitted by this light source. Lights that have 0 power will not emit any photons.
      Returns:
        light source power

    - #### createInstance

          Instance createInstance()

      Create an instance which represents the geometry of this light source. This instance will be created just before and removed immediately after rendering. Non-area light sources can return `null` to indicate that no geometry needs to be created.
      Returns:
        an instance describing the light source