cz.cuni.jagrlib
Class DefaultLightSource

java.lang.Object
  extended by cz.cuni.jagrlib.DefaultProperty
      extended by cz.cuni.jagrlib.Piece
          extended by cz.cuni.jagrlib.DefaultLightSource
All Implemented Interfaces:
Breakable, LightSource, Property, Template
Direct Known Subclasses:
AmbientLightSource, DirectionalLightSource, StaticAreaLightSource, StaticPointLightSource, StaticSphericalLightSource, StaticSpotLightSource

public abstract class DefaultLightSource
extends Piece
implements LightSource

Default implementation of LightSource interface. Simple and supersampled variants point to each other.

Since:
0.25
See Also:
DefaultLightSource.java

Field Summary
protected static java.lang.String CATEGORY
          Object category.
protected  Intersectable inter
          Object used for light-source visibility tests.
static java.lang.String KEY_LIGHT
          JGL script key: lights.
static java.lang.String PARAMS
          Property name: light source parameters.
protected  boolean plugInter
          Accelerator: connected intersectable was tried?
protected  java.lang.String scriptName
          JGL script file-name.
protected static java.lang.String TEMPLATE_NAME
          Object template identifier.
 
Fields inherited from class cz.cuni.jagrlib.Piece
channels, info, pl, plugs, reg, TEMPLATE_TYPE, userBreak
 
Fields inherited from interface cz.cuni.jagrlib.iface.LightSource
COLOR
 
Fields inherited from interface cz.cuni.jagrlib.iface.Property
LOGGING, STATISTICS, TEXT_DESCRIPTION
 
Fields inherited from interface cz.cuni.jagrlib.Template
ALL_PLUGS, C_1D, C_2D, C_3D, C_ALPHA, C_BINARY, C_BREP, C_CAMERA, C_CIRCLE, C_CLIP, C_COMPRESSION, C_CURVE, C_DATA, C_DRAW, C_EDITOR, C_ELLIPSE, C_FILL, C_FILTER, C_FLOAT, C_FUNCTION, C_IMAGE, C_INTEGER, C_IO, C_LIGHT, C_LINE, C_METRIC, C_POLYGON, C_PROJECTION, C_RADIOSITY, C_RASTER, C_RENDER, C_SAMPLE, C_SCENE, C_SET, C_SOLID, C_TEXT, C_TRANSFORM, C_VECTOR, C_VIEWER, C_WORKER, CAT_EMPTY, EMPTY, IFACE, JAGRLIB, JAGRLIB2, MANIPULATOR_COMBO, MANIPULATOR_CUSTOM, MANIPULATOR_DEFAULT, MANIPULATOR_MULTILINE, PL_ALPHAMASK, PL_BITMASK, PL_CAUSTIC, PL_CODEC, PL_COLORMAP, PL_COMPARE, PL_DATA, PL_DIRECT, PL_EDITOR, PL_FILTER, PL_FUNCTION, PL_IMAGE, PL_IMPORT, PL_INPUT, PL_INTERSECTION, PL_LIGHTSOURCE, PL_ORDER, PL_OUTPUT, PL_PALETTE, PL_PHOTON, PL_PROPERTY, PL_QUANTIZER, PL_RASTER, PL_RENDER, PL_SHADOW, PL_STREAM, PL_TRANSFORM, PL_TRIGGER, PL_VOLUME, PL_WINDOW, TYPE_BOOLEAN, TYPE_DOUBLE, TYPE_FLOAT, TYPE_INTEGER, TYPE_LONG, TYPE_OBJECT, TYPE_STRING
 
Constructor Summary
DefaultLightSource()
           
 
Method Summary
protected  boolean assertInter()
          Asserts the inter accelerator.
 boolean getDirection(MicroFacet mf, double[] dir)
          Returns light direction between the source and the given MicroFacet.
 boolean getDirection(MicroFacet mf, int order, int total, double[] dir)
          Returns light direction between the source and the given MicroFacet.
 boolean getIntensity(MicroFacet mf, double[] color)
          Returns light intensity coming from the source to the given MicroFacet.
 boolean getIntensity(MicroFacet mf, int order, int total, double[] color)
          Returns light intensity coming from the source to the given MicroFacet.
 boolean isDeltaLight()
          Is delta light?
 boolean lights(MicroFacet mf)
          Lighting test from the source to the given MicroFacet.
 boolean lights(MicroFacet mf, int order, int total)
          Lighting test from the source to the given MicroFacet.
 double pdf(double[] point, double[] normal, double[] dir)
          Return probability density function.
 double sample(double u1, double v1, double u2, double v2, double[] pos, double[] dir, double[] power)
          Generates one photon leaving this light source.
 boolean sample(MicroFacet mf, double u, double v, double[] color, double[] dir, double[] pdf, boolean testVisibility)
          Sample the light by one shadow ray.
 Intersectable setIntersectable(Intersectable intersect)
          Sets intersectable object (for light-source of visibility: lights(MicroFacet), ..).
 
Methods inherited from class cz.cuni.jagrlib.Piece
className, connect, findPlug, findPlug, getInfo, getInterface, getInterface, getPlug, getReg, init, isCompatible, isCompatible, isConnected, logError, logWarning, myInterface, newInputPlug, newOptOutputPlug, newOutputPlug, newPlug, noTemplates, propBegin, propBounds, propDefault, propEnd, propEnum, propManipulator, propManipulator, setProgressListener, setRegStrings, setTemplate, setTemplateDynamic, stop
 
Methods inherited from class cz.cuni.jagrlib.DefaultProperty
booleanProperty, booleanProperty, colorDoubleProperty, colorProperty, commit, doubleProperty, doubleProperty, doubleProperty, enumProperty, floatProperty, floatProperty, floatProperty, get, intProperty, intProperty, intProperty, longProperty, longProperty, longProperty, set, set, stringProperty
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface cz.cuni.jagrlib.iface.Property
commit, get, set
 

Field Detail

KEY_LIGHT

public static final java.lang.String KEY_LIGHT
JGL script key: lights.

See Also:
Constant Field Values

PARAMS

public static final java.lang.String PARAMS
Property name: light source parameters.

See Also:
Constant Field Values

scriptName

protected java.lang.String scriptName
JGL script file-name.


inter

protected Intersectable inter
Object used for light-source visibility tests.


plugInter

protected boolean plugInter
Accelerator: connected intersectable was tried?


TEMPLATE_NAME

protected static final java.lang.String TEMPLATE_NAME
Object template identifier.

See Also:
Constant Field Values

CATEGORY

protected static final java.lang.String CATEGORY
Object category.

See Also:
Constant Field Values
Constructor Detail

DefaultLightSource

public DefaultLightSource()
Method Detail

assertInter

protected boolean assertInter()
Asserts the inter accelerator.

Returns:
true if failed.

setIntersectable

public Intersectable setIntersectable(Intersectable intersect)
Sets intersectable object (for light-source of visibility: lights(MicroFacet), ..).

Specified by:
setIntersectable in interface LightSource

lights

public boolean lights(MicroFacet mf)
Lighting test from the source to the given MicroFacet.

Specified by:
lights in interface LightSource
Parameters:
mf - The checked MicroFacet (point on surface of some solid).
Returns:
true if the light source lights on the given point.
See Also:
getIntensity(cz.cuni.jagrlib.MicroFacet, double[]), getDirection(cz.cuni.jagrlib.MicroFacet, double[])

lights

public boolean lights(MicroFacet mf,
                      int order,
                      int total)
Lighting test from the source to the given MicroFacet. Super-sampling variant.

Specified by:
lights in interface LightSource
Parameters:
mf - The checked MicroFacet (point on surface of some solid).
order - Order of this sample inside the actual pixel.
total - Total number of samples in the actual pixel.
Returns:
true if the light source lights on the given point.
See Also:
getIntensity(cz.cuni.jagrlib.MicroFacet, double[]), getDirection(cz.cuni.jagrlib.MicroFacet, double[])

getIntensity

public boolean getIntensity(MicroFacet mf,
                            double[] color)
Returns light intensity coming from the source to the given MicroFacet.

Specified by:
getIntensity in interface LightSource
Parameters:
mf - The MicroFacet (point on surface of some solid).
color - Pre-allocated double[C] array to hold result - light intensity coming from the source to the given point (C can be either 1 /for monochrome computing/, 3 /for RGB color system/ or greater /for more complex spectral color sampling/).
Returns:
true if the light source can light on the given point (cannot replace the lights() call!).
See Also:
lights(cz.cuni.jagrlib.MicroFacet), getDirection(cz.cuni.jagrlib.MicroFacet, double[])

getIntensity

public boolean getIntensity(MicroFacet mf,
                            int order,
                            int total,
                            double[] color)
Returns light intensity coming from the source to the given MicroFacet. Super-sampling variant.

Specified by:
getIntensity in interface LightSource
Parameters:
mf - The MicroFacet (point on surface of some solid).
order - Order of this sample inside the actual pixel.
total - Total number of samples in the actual pixel.
color - Pre-allocated double[C] array to hold result - light intensity coming from the source to the given point (C can be either 1 /for monochrome computing/, 3 /for RGB color system/ or greater /for more complex spectral color sampling/).
Returns:
true if the light source can light on the given point (cannot replace the lights() call!).
See Also:
lights(cz.cuni.jagrlib.MicroFacet), getDirection(cz.cuni.jagrlib.MicroFacet, double[])

getDirection

public boolean getDirection(MicroFacet mf,
                            double[] dir)
Returns light direction between the source and the given MicroFacet.

Specified by:
getDirection in interface LightSource
Parameters:
mf - The MicroFacet (point on surface of some solid).
dir - Pre-allocated array to hold the result - normalised direction vector from the MicroFacet to the light source.
Returns:
false if the light source is not directional (thus dir is irrelevant).
See Also:
lights(cz.cuni.jagrlib.MicroFacet), getIntensity(cz.cuni.jagrlib.MicroFacet, double[])

getDirection

public boolean getDirection(MicroFacet mf,
                            int order,
                            int total,
                            double[] dir)
Returns light direction between the source and the given MicroFacet. Super-sampling variant.

Specified by:
getDirection in interface LightSource
Parameters:
mf - The MicroFacet (point on surface of some solid).
order - Order of this sample inside the actual pixel.
total - Total number of samples in the actual pixel.
dir - Pre-allocated array to hold the result - normalised direction vector from the MicroFacet to the light source.
Returns:
false if the light source is not directional (thus dir is irrelevant).
See Also:
lights(cz.cuni.jagrlib.MicroFacet), getIntensity(cz.cuni.jagrlib.MicroFacet, double[])

sample

public boolean sample(MicroFacet mf,
                      double u,
                      double v,
                      double[] color,
                      double[] dir,
                      double[] pdf,
                      boolean testVisibility)
Sample the light by one shadow ray.

Specified by:
sample in interface LightSource
Parameters:
mf - The MicroFacet (point on surface of some solid).
ksi1 - Uniform random number.
ksi1 - Uniform random number.
color - Pre-allocated double[C] array to hold result - light intensity coming from the source to the given point (C can be either 1 /for monochrome computing/, 3 /for RGB color system/ or greater /for more complex spectral color sampling/).
dir - Pre-allocated array to hold the result - normalised direction vector from the MicroFacet to the light source.
pdf - Probability density function.
Returns:
True if the light is visible.

sample

public double sample(double u1,
                     double v1,
                     double u2,
                     double v2,
                     double[] pos,
                     double[] dir,
                     double[] power)
Generates one photon leaving this light source.

Specified by:
sample in interface LightSource
Parameters:
u1 - Uniform random number.
v1 - Uniform random number.
u2 - Uniform random number.
v2 - Uniform random number.
pos - Pre-allocated array which holds a point on the light source (an origin of direction).
dir - Output direction in world coordinates. Pre-allocated array.
power - Power of given light source (if you wanna get power of this photon, you have to divide this power by number of photons). Pre-allocated array.
Returns:
Probability density function of given ray.

pdf

public double pdf(double[] point,
                  double[] normal,
                  double[] dir)
Return probability density function.

Specified by:
pdf in interface LightSource
Parameters:
point - Point on the surface.
normal - Normal at this point.
dir - Direction from the point.

isDeltaLight

public boolean isDeltaLight()
Is delta light?

Specified by:
isDeltaLight in interface LightSource