Package org.sunflow.core.photonmap
Class CausticPhotonMap
- java.lang.Object
-
- org.sunflow.core.photonmap.CausticPhotonMap
-
- All Implemented Interfaces:
CausticPhotonMapInterface
,PhotonStore
public final class CausticPhotonMap extends java.lang.Object implements CausticPhotonMapInterface
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
CausticPhotonMap.NearestPhotons
private static class
CausticPhotonMap.Photon
-
Field Summary
Fields Modifier and Type Field Description private BoundingBox
bounds
private float
filterValue
private int
gatherNum
private float
gatherRadius
private int
halfStoredPhotons
private int
log2n
private float
maxPower
private float
maxRadius
private int
numEmit
private java.util.ArrayList<CausticPhotonMap.Photon>
photonList
private CausticPhotonMap.Photon[]
photons
private int
storedPhotons
-
Constructor Summary
Constructors Constructor Description CausticPhotonMap()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
allowDiffuseBounced()
Allow photons reflected diffusely?boolean
allowReflectionBounced()
Allow specularly reflected photons?boolean
allowRefractionBounced()
Allow refracted photons?private void
balance()
private void
balanceSegment(CausticPhotonMap.Photon[] temp, int index, int start, int end)
void
getSamples(ShadingState state)
Retrieve caustic photons at the specified shading location and add them as diffuse light samples.void
init()
Initialize the map after all photons have been stored.private void
locatePhotons(CausticPhotonMap.NearestPhotons np)
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.private void
swap(int i, int j)
-
-
-
Field Detail
-
photonList
private java.util.ArrayList<CausticPhotonMap.Photon> photonList
-
photons
private CausticPhotonMap.Photon[] photons
-
storedPhotons
private int storedPhotons
-
halfStoredPhotons
private int halfStoredPhotons
-
log2n
private int log2n
-
gatherNum
private int gatherNum
-
gatherRadius
private float gatherRadius
-
bounds
private BoundingBox bounds
-
filterValue
private float filterValue
-
maxPower
private float maxPower
-
maxRadius
private float maxRadius
-
numEmit
private int numEmit
-
-
Method Detail
-
prepare
public void prepare(Options options, BoundingBox sceneBounds)
Description copied from interface:PhotonStore
Initialize this object for the specified scene size.- Specified by:
prepare
in interfacePhotonStore
sceneBounds
- scene bounding box
-
locatePhotons
private void locatePhotons(CausticPhotonMap.NearestPhotons np)
-
balance
private void balance()
-
balanceSegment
private void balanceSegment(CausticPhotonMap.Photon[] temp, int index, int start, int end)
-
swap
private void swap(int i, int j)
-
store
public void store(ShadingState state, Vector3 dir, Color power, Color diffuse)
Description copied from interface:PhotonStore
Store the specified photon.- Specified by:
store
in interfacePhotonStore
- Parameters:
state
- shading statedir
- photon directionpower
- photon powerdiffuse
- diffuse color at the hit point
-
init
public void init()
Description copied from interface:PhotonStore
Initialize the map after all photons have been stored. This can be used to balance a kd-tree based photon map for example.- Specified by:
init
in interfacePhotonStore
-
getSamples
public void getSamples(ShadingState state)
Description copied from interface:CausticPhotonMapInterface
Retrieve caustic photons at the specified shading location and add them as diffuse light samples.- Specified by:
getSamples
in interfaceCausticPhotonMapInterface
-
allowDiffuseBounced
public boolean allowDiffuseBounced()
Description copied from interface:PhotonStore
Allow photons reflected diffusely?- Specified by:
allowDiffuseBounced
in interfacePhotonStore
- Returns:
true
if diffuse bounces should be traced
-
allowReflectionBounced
public boolean allowReflectionBounced()
Description copied from interface:PhotonStore
Allow specularly reflected photons?- Specified by:
allowReflectionBounced
in interfacePhotonStore
- Returns:
true
if specular reflection bounces should be traced
-
allowRefractionBounced
public boolean allowRefractionBounced()
Description copied from interface:PhotonStore
Allow refracted photons?- Specified by:
allowRefractionBounced
in interfacePhotonStore
- Returns:
true
if refracted bounces should be traced
-
numEmit
public int numEmit()
Description copied from interface:PhotonStore
Number of photons to emit from this surface.- Specified by:
numEmit
in interfacePhotonStore
- Returns:
- number of photons
-
-