Package org.sunflow.core

## Interface PhotonStore

- All Known Subinterfaces:
    `CausticPhotonMapInterface`, `GlobalPhotonMapInterface`
  All Known Implementing Classes:
    `CausticPhotonMap`, `GlobalPhotonMap`, `GridPhotonMap`

      public interface PhotonStore

  Describes an object which can store photons.

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `allowDiffuseBounced()` | Allow photons reflected diffusely?
    `boolean` | `allowReflectionBounced()` | Allow specularly reflected photons?
    `boolean` | `allowRefractionBounced()` | Allow refracted photons?
    `void` | `init()` | Initialize the map after all photons have been stored.
    `int` | `numEmit()` | Number of photons to emit from this surface.
    `void` | `prepare​(Options options, BoundingBox sceneBounds)` | Initialize this object for the specified scene size.
    `void` | `store​(ShadingState state, Vector3 dir, Color power, Color diffuse)` | Store the specified photon.

- - ### Method Detail

    - #### numEmit

          int numEmit()

      Number of photons to emit from this surface.
      Returns:
        number of photons

    - #### prepare

          void prepare​(Options options,
                       BoundingBox sceneBounds)

      Initialize this object for the specified scene size.
      Parameters:
        `sceneBounds` - scene bounding box

    - #### store

          void store​(ShadingState state,
                     Vector3 dir,
                     Color power,
                     Color diffuse)

      Store the specified photon.
      Parameters:
        `state` - shading state
        `dir` - photon direction
        `power` - photon power
        `diffuse` - diffuse color at the hit point

    - #### init

          void init()

      Initialize the map after all photons have been stored. This can be used to balance a kd-tree based photon map for example.

    - #### allowDiffuseBounced

          boolean allowDiffuseBounced()

      Allow photons reflected diffusely?
      Returns:
        `true` if diffuse bounces should be traced

    - #### allowReflectionBounced

          boolean allowReflectionBounced()

      Allow specularly reflected photons?
      Returns:
        `true` if specular reflection bounces should be traced

    - #### allowRefractionBounced

          boolean allowRefractionBounced()

      Allow refracted photons?
      Returns:
        `true` if refracted bounces should be traced