|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object de.grogra.persistence.ShareableBase de.grogra.imp3d.objects.LightBase de.grogra.imp3d.objects.PointLight de.grogra.imp3d.objects.PhysicalLight
public class PhysicalLight
Nested Class Summary | |
---|---|
static class |
PhysicalLight.Type
|
Field Summary | |
---|---|
static PhysicalLight.Type |
$TYPE
|
static SCOType.Field |
distribution$FIELD
|
Fields inherited from class de.grogra.imp3d.objects.PointLight |
---|
attenuationDistance$FIELD, attenuationExponent$FIELD, power$FIELD |
Fields inherited from class de.grogra.imp3d.objects.LightBase |
---|
color$FIELD, shadowless$FIELD |
Fields inherited from interface de.grogra.ray.physics.Light |
---|
AMBIENT, AREA, DIRECTIONAL, NO_LIGHT, POINT, SKY |
Fields inherited from interface de.grogra.ray.physics.Scattering |
---|
DELTA_FACTOR, IS_NON_OPAQUE, MIN_UNUSED_FLAG, NEEDS_NORMAL, NEEDS_POINT, NEEDS_TANGENTS, NEEDS_TRANSFORMATION, NEEDS_UV, RANDOM_RAYS_GENERATE_ORIGINS |
Constructor Summary | |
---|---|
PhysicalLight()
physical light constructor |
|
PhysicalLight(double[][] distribution)
physical light constructor |
|
PhysicalLight(LightDistribution distribution)
physical light constructor |
Method Summary | |
---|---|
void |
generateRandomRays(Environment env,
Vector3f out,
Spectrum specOut,
RayList rays,
boolean adjoint,
java.util.Random rnd)
Pseudorandomly generates, for the given input, a set of scattered rays. |
protected float |
getDensityAt(Vector3f direction)
|
LightDistribution |
getDistribution()
|
ManageableType |
getManageableType()
|
void |
setDistribution(double[][] distribution)
sets the light emission dsitribution |
void |
setDistribution(Light light)
sets the light emission dsitribution by discretizing the emission distribution of an existing light source |
void |
setDistribution(LightDistribution value)
|
Methods inherited from class de.grogra.imp3d.objects.PointLight |
---|
accept, computeBSDF, computeExitance, createRaytracerLeaf, generateRandomOrigins, getAttenuationDistance, getAttenuationExponent, getLightType, getPower, getTotalPower, setAttenuationDistance, setAttenuationExponent, setPower |
Methods inherited from class de.grogra.imp3d.objects.LightBase |
---|
completeRay, draw, getAverageColor, getColor, getFlags, isIgnoredWhenHit, isShadowless, setShadowless |
Methods inherited from class de.grogra.persistence.ShareableBase |
---|
addReference, appendReferencesTo, fieldModified, getProvider, getStamp, initProvider, manageableReadResolve, manageableWriteReplace, removeReference |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final PhysicalLight.Type $TYPE
public static final SCOType.Field distribution$FIELD
Constructor Detail |
---|
public PhysicalLight()
public PhysicalLight(double[][] distribution)
distribution
- is the 2D discretized light emission distribution over the unit spherepublic PhysicalLight(LightDistribution distribution)
distribution
- is the light emission distribution over the unit sphereMethod Detail |
---|
public void generateRandomRays(Environment env, Vector3f out, Spectrum specOut, RayList rays, boolean adjoint, java.util.Random rnd)
Scattering
adjoint
is false
,
out
= ωo describes
the direction of an outgoing light ray.
In this case, the integration is with respect to ωi.
Let g(ω, ν; out
, μ)
= BSDF(ω, ν; out
, μ)
adjoint
is true
. In this case,
out
= ωi describes
the direction of an outgoing importance ray (an inverse light ray).
Now the integration is with respect to ωo.
Let g(ω, ν; out
, μ)
= BSDF(out
, μ; ω, ν)
rays.size
). Then, for every
frequency ν the sum
out
, μ)
specOut
(μ) dμ dω
If this Scattering
instance is in fact a
Light
source, adjoint
is true
,
and the BSDF is defined as BSDF(out
, μ; ω, ν)
= L1(ω, ν) δ(μ - ν),
i.e., the directional distribution
of the emitted radiance at env.point
, see Emitter
.
In this case, out
is not used.
If this Scattering
instance is in fact a
Sensor
, adjoint
is false
,
and the BSDF is defined as BSDF(ω, ν; out
, μ)
= W1(ω, ν) δ(μ - ν),
i.e., the directional distribution
of the emitted importance at env.point
, see Emitter
.
In this case, out
is not used.
Let pω be the probability density
used for the ray direction (measured with respect to
solid angle ω),
then the field directionDensity
of the ray i
is set to pω(di).
For ideal specular reflection or transmission, or for directional
lights or sensors, pω is not
a regular function, the value directionDensity
will
be set to a multiple of Scattering.DELTA_FACTOR
.
The ray properties which are not mentioned in the given formulas are neither used nor modified. These are the origin and its density.
generateRandomRays
in interface Scattering
generateRandomRays
in class PointLight
env
- the environment for scatteringout
- the direction unit vector of the outgoing ray
(i.e., pointing away from the surface)specOut
- the spectrum of the outgoing rayrays
- the rays to be generatedadjoint
- represents out
a light ray or an importance ray?rnd
- pseudorandom generatorScattering.computeBSDF(de.grogra.ray.physics.Environment, javax.vecmath.Vector3f, de.grogra.ray.physics.Spectrum, javax.vecmath.Vector3f, boolean, de.grogra.ray.physics.Spectrum)
protected float getDensityAt(Vector3f direction)
getDensityAt
in class PointLight
public LightDistribution getDistribution()
public ManageableType getManageableType()
getManageableType
in interface Manageable
getManageableType
in class PointLight
public void setDistribution(double[][] distribution)
distribution
- is the 2D discretized light emission distribution over the unit spherepublic void setDistribution(Light light)
light
- is used to construct a discretized emission distributionpublic void setDistribution(LightDistribution value)
|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |