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

Methods
`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