de.grogra.imp3d.objects
public class PhysicalLight extends PointLight
| Modifier and Type | Class and Description |
|---|---|
static class |
PhysicalLight.Type |
| Modifier and Type | Field and Description |
|---|---|
static PhysicalLight.Type |
$TYPE |
static SCOType.Field |
distribution$FIELD |
attenuationDistance$FIELD, attenuationExponent$FIELD, power$FIELDcolor$FIELD, numberofrays, numberofrays$FIELD, raylength, raylength$FIELD, shadowless$FIELD, visualize, visualize$FIELDAMBIENT, AREA, DIRECTIONAL, NO_LIGHT, POINT, SKYDELTA_FACTOR, IS_NON_OPAQUE, MIN_UNUSED_FLAG, NEEDS_NORMAL, NEEDS_POINT, NEEDS_TANGENTS, NEEDS_TRANSFORMATION, NEEDS_UV, RANDOM_RAYS_GENERATE_ORIGINS| Constructor and Description |
|---|
PhysicalLight()
physical light constructor
|
PhysicalLight(double[][] distribution)
physical light constructor
|
PhysicalLight(LightDistributionIF distribution)
physical light constructor
|
| Modifier and Type | Method and Description |
|---|---|
protected void |
draw(Tuple3f color,
RenderState rs) |
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) |
LightDistributionIF |
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(LightDistributionIF value) |
accept, computeBSDF, computeExitance, createRaytracerLeaf, generateRandomOrigins, getAttenuationDistance, getAttenuationExponent, getLightType, getPower, getTotalPower, setAttenuationDistance, setAttenuationExponent, setPowercompleteRay, getAverageColor, getColor, getFlags, getNumberofrays, getRaylength, isIgnoredWhenHit, isShadowless, isVisualize, resolveLight, setNumberofrays, setRaylength, setShadowless, setVisualizeaddReference, appendReferencesTo, fieldModified, getProvider, getStamp, initProvider, manageableReadResolve, manageableWriteReplace, removeReferencepublic static final PhysicalLight.Type $TYPE
public static final SCOType.Field distribution$FIELD
public PhysicalLight()
public PhysicalLight(double[][] distribution)
distribution - is the 2D discretized light emission distribution over the unit spherepublic PhysicalLight(LightDistributionIF distribution)
distribution - is the light emission distribution over the unit sphereprotected void draw(Tuple3f color, RenderState rs)
draw in class PointLightpublic void generateRandomRays(Environment env, Vector3f out, Spectrum specOut, RayList rays, boolean adjoint, java.util.Random rnd)
Scatteringadjoint 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 ScatteringgenerateRandomRays in class PointLightenv - 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 PointLightpublic LightDistributionIF getDistribution()
public ManageableType getManageableType()
getManageableType in interface ManageablegetManageableType in class PointLightpublic 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(LightDistributionIF value)