Package org.sunflow.core.photonmap
Class GridPhotonMap
- java.lang.Object
-
- org.sunflow.core.photonmap.GridPhotonMap
-
- All Implemented Interfaces:
GlobalPhotonMapInterface
,PhotonStore
public class GridPhotonMap extends java.lang.Object implements GlobalPhotonMapInterface
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private class
GridPhotonMap.PhotonGroup
-
Field Summary
Fields Modifier and Type Field Description private BoundingBox
bounds
private GridPhotonMap.PhotonGroup[]
cellHash
private float
gatherRadius
private int
hashPrime
private int
hashSize
private static float
NORMAL_THRESHOLD
private int
numEmit
private int
numGather
private int
numStoredPhotons
private int
nx
private int
ny
private int
nz
private static int[]
PRIMES
private java.util.concurrent.locks.ReentrantReadWriteLock
rwl
-
Constructor Summary
Constructors Constructor Description GridPhotonMap()
-
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 GridPhotonMap.PhotonGroup
get(int x, int y, int z)
Color
getRadiance(Point3 p, Vector3 n)
Lookup the global diffuse radiance at the specified surface point.private void
growPhotonHash()
void
init()
Initialize the map after all photons have been stored.int
numEmit()
Number of photons to emit from this surface.void
precomputeRadiance(boolean includeDirect, boolean includeCaustics)
void
prepare(Options options, BoundingBox sceneBounds)
Initialize this object for the specified scene size.int
size()
void
store(ShadingState state, Vector3 dir, Color power, Color diffuse)
Store the specified photon.
-
-
-
Field Detail
-
numGather
private int numGather
-
gatherRadius
private float gatherRadius
-
numStoredPhotons
private int numStoredPhotons
-
nx
private int nx
-
ny
private int ny
-
nz
private int nz
-
bounds
private BoundingBox bounds
-
cellHash
private GridPhotonMap.PhotonGroup[] cellHash
-
hashSize
private int hashSize
-
hashPrime
private int hashPrime
-
rwl
private java.util.concurrent.locks.ReentrantReadWriteLock rwl
-
numEmit
private int numEmit
-
NORMAL_THRESHOLD
private static final float NORMAL_THRESHOLD
-
PRIMES
private static final int[] PRIMES
-
-
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
-
size
public int size()
-
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
-
precomputeRadiance
public void precomputeRadiance(boolean includeDirect, boolean includeCaustics)
-
growPhotonHash
private void growPhotonHash()
-
getRadiance
public Color getRadiance(Point3 p, Vector3 n)
Description copied from interface:GlobalPhotonMapInterface
Lookup the global diffuse radiance at the specified surface point.- Specified by:
getRadiance
in interfaceGlobalPhotonMapInterface
- Parameters:
p
- surface positionn
- surface normal- Returns:
- an approximation of global diffuse radiance at this point
-
get
private GridPhotonMap.PhotonGroup get(int x, int y, int z)
-
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
-
-