Overview | Package | Class | Tree | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## de.grogra.imp3d.objects
Class PhysicalLight

    java.lang.Object
      de.grogra.persistence.ShareableBase
          de.grogra.imp3d.objects.LightBase
              de.grogra.imp3d.objects.PointLight
                  de.grogra.imp3d.objects.PhysicalLight

All Implemented Interfaces:
  Raytraceable, Manageable, Shareable, Emitter, Light, Scattering

    public class PhysicalLight

extends PointLight

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

### $TYPE

    public static final PhysicalLight.Type $TYPE

### distribution$FIELD

    public static final SCOType.Field distribution$FIELD

Constructor Detail

### PhysicalLight

    public PhysicalLight()

  physical light constructor

### PhysicalLight

    public PhysicalLight(double[][] distribution)

  physical light constructor

  Parameters:
    `distribution` - is the 2D discretized light emission distribution over the unit sphere

### PhysicalLight

    public PhysicalLight(LightDistribution distribution)

  physical light constructor

  Parameters:
    `distribution` - is the light emission distribution over the unit sphere

Method Detail

### generateRandomRays

    public void generateRandomRays(Environment env,
                                   Vector3f out,
                                   Spectrum specOut,
                                   RayList rays,
                                   boolean adjoint,
                                   java.util.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` 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`, μ)
  - Otherwise, `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`, μ; ω, ν)
  Let di and si denote the directions and spectra of the N generated rays (N = `rays.size`). Then, for every frequency ν the sum
  1 / N ∑i si(ν) f(di; ν)
  is an unbiased estimate for the integral
  ∫ cos θ f(ω; ν) g(ω, ν; `out`, μ) `specOut`(μ) dμ dω
  θ 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).

  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.

  Specified by:
    `generateRandomRays` in interface `Scattering`
  Overrides:
    `generateRandomRays` in class `PointLight`
  Parameters:
    `env` - the environment for scattering
    `out` - the direction unit vector of the outgoing ray (i.e., pointing away from the surface)
    `specOut` - the spectrum of the outgoing ray
    `rays` - the rays to be generated
    `adjoint` - represents `out` a light ray or an importance ray?
    `rnd` - pseudorandom generator
  See Also:
    `Scattering.computeBSDF(de.grogra.ray.physics.Environment, javax.vecmath.Vector3f, de.grogra.ray.physics.Spectrum, javax.vecmath.Vector3f, boolean, de.grogra.ray.physics.Spectrum)`

### getDensityAt

    protected float getDensityAt(Vector3f direction)

  Overrides:
    `getDensityAt` in class `PointLight`

### getDistribution

    public LightDistribution getDistribution()

### getManageableType

    public ManageableType getManageableType()

  Specified by:
    `getManageableType` in interface `Manageable`
  Overrides:
    `getManageableType` in class `PointLight`

### 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

    public void setDistribution(Light light)

  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

### setDistribution

    public void setDistribution(LightDistribution value)

Overview | Package | Class | Tree | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD