- All Implemented Interfaces:
Raytraceable
,Light
,Scattering
,Manageable
,Shareable
,Emitter
,Light
,Scattering
-
Nested Class Summary
-
Field Summary
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, color$FIELD, numberofrays, numberofrays$FIELD, raylength, raylength$FIELD, shadowless$FIELD, visualize, visualize$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
ConstructorDescriptionphysical light constructorPhysicalLight
(double[][] distribution) physical light constructorPhysicalLight
(LightDistributionIF distribution) physical light constructor -
Method Summary
Modifier and TypeMethodDescriptionprotected void
draw
(Tuple3f color, RenderState rs) void
generateRandomRays
(Environment env, Vector3f out, Spectrum specOut, RayList rays, boolean adjoint, Random rnd) Pseudorandomly generates, for the given input, a set of scattered rays.protected float
getDensityAt
(Vector3f direction) void
setDistribution
(double[][] distribution) sets the light emission dsitributionvoid
void
setDistribution
(Light light) sets the light emission dsitribution by discretizing the emission distribution of an existing light sourceMethods 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, getAverageColor, getColor, getFlags, getNumberofrays, getRaylength, isIgnoredWhenHit, isShadowless, isVisualize, resolveLight, setNumberofrays, setRaylength, setShadowless, setVisualize
Methods inherited from class de.grogra.persistence.ShareableBase
addReference, appendReferencesTo, fieldModified, getProvider, getStamp, initProvider, manageableReadResolve, manageableWriteReplace, removeReference
-
Field Details
-
$TYPE
-
distribution$FIELD
-
-
Constructor Details
-
PhysicalLight
public PhysicalLight()physical light constructor -
PhysicalLight
physical light constructor- Parameters:
distribution
- is the light emission distribution over the unit sphere
-
PhysicalLight
public PhysicalLight(double[][] distribution) physical light constructor- Parameters:
distribution
- is the 2D discretized light emission distribution over the unit sphere
-
-
Method Details
-
getManageableType
- Specified by:
getManageableType
in interfaceManageable
- Overrides:
getManageableType
in classPointLight
-
getDistribution
-
setDistribution
-
setDistribution
public void setDistribution(double[][] distribution) sets the light emission dsitribution- Parameters:
distribution
- is the 2D discretized light emission distribution over the unit sphere
-
setDistribution
sets the light emission dsitribution by discretizing the emission distribution of an existing light source- Parameters:
light
- is used to construct a discretized emission distribution
-
draw
- Overrides:
draw
in classPointLight
-
generateRandomRays
public void generateRandomRays(Environment env, Vector3f out, Spectrum specOut, RayList rays, boolean adjoint, Random rnd) Description copied from interface:Scattering
Pseudorandomly generates, for the given input, a set of scattered rays. The scattered rays are generated such that they can be used for a Monte Carlo integration of a function f(ω;ν) over cos θ BSDF(ωi, νi; ωo, νo) in the following way:-
If
adjoint
isfalse
,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
, μ) -
Otherwise,
adjoint
istrue
. 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 sum1 / N ∑i si(ν) f(di; ν) is an unbiased estimate for the integral∫ cos θ f(ω; ν) g(ω, ν; θ is the angle between the surface normal and ω. The domain of integration is the whole sphere, since the bidirectional scattering distribution includes both reflection and transmission (BSDF = BRDF + BTDF).out
, μ)specOut
(μ) dμ dωIf this
Scattering
instance is in fact aLight
source,adjoint
istrue
, and the BSDF is defined as BSDF(out
, μ; ω, ν) = L1(ω, ν) δ(μ - ν), i.e., the directional distribution of the emitted radiance atenv.point
, seeEmitter
. In this case,out
is not used.If this
Scattering
instance is in fact aSensor
,adjoint
isfalse
, and the BSDF is defined as BSDF(ω, ν;out
, μ) = W1(ω, ν) δ(μ - ν), i.e., the directional distribution of the emitted importance atenv.point
, seeEmitter
. 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 valuedirectionDensity
will be set to a multiple ofScattering.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.
- Specified by:
generateRandomRays
in interfaceScattering
- Overrides:
generateRandomRays
in classPointLight
- Parameters:
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
- representsout
a light ray or an importance ray?rnd
- pseudorandom generator- See Also:
-
If
-
getDensityAt
- Overrides:
getDensityAt
in classPointLight
-