cz.cuni.jagrlib.piece
Class PhongModel

java.lang.Object
  extended by cz.cuni.jagrlib.DefaultProperty
      extended by cz.cuni.jagrlib.Piece
          extended by cz.cuni.jagrlib.piece.PhongModel
All Implemented Interfaces:
Breakable, LightModel, Property, Template

public class PhongModel
extends Piece
implements LightModel

Phong shading model (with constant or Schlick K() term).

Since:
0.12
Version:
0.26 $Rev: 477 $ $Date: 2007-06-03 03:19:26 +0200 (ne, 03 VI 2007) $ $Author: pepca $
See Also:
PhongModel.java

Field Summary
protected static String CATEGORY
          Object category.
static RegPiece reg
          Static registration instance for this class.
protected static String TEMPLATE_NAME
          Object template identifier.
 
Fields inherited from class cz.cuni.jagrlib.Piece
channels, info, pl, plugs, TEMPLATE_TYPE, userBreak
 
Fields inherited from interface cz.cuni.jagrlib.iface.LightModel
COMP_ALL, COMP_DIFFUSE, COMP_SPEC_REFLECTION, COMP_SPEC_REFRACTION, COMP_SPECULAR, MATERIAL_COLOR, MATERIAL_H, MATERIAL_KA, MATERIAL_KD, MATERIAL_KS, MATERIAL_KT, MATERIAL_N
 
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_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_PROPERTY, PL_QUANTIZER, PL_RASTER, PL_RENDER, PL_STREAM, PL_TRANSFORM, PL_TRIGGER, PL_WINDOW, TYPE_BOOLEAN, TYPE_DOUBLE, TYPE_FLOAT, TYPE_INTEGER, TYPE_LONG, TYPE_OBJECT, TYPE_STRING
 
Constructor Summary
PhongModel()
           
 
Method Summary
protected  double[] color(double[] in, double[] out, double[] normal, PhongMaterial d, int mask, double[] result)
          Common computation for color BRDF sample (BRDF is treated as band-color).
 double[] colorBRDF(double[] in, double[] out, double[] normal, Property data, int mask, double[] result)
          Returns the requested BRDF sample (BRDF is treated as band-color).
 double[] colorBRDF(MicroFacet mf, double[] in, double[] out, int mask, double[] result)
          Returns the requested BRDF sample (BRDF is treated as band-color).
 Property createMaterial()
          Create material object for the Phong shading model.
 double[] getOrigColor(double[] color, Property data)
          Retrieves the original color (defining surface color).
 double[] lightSum(MicroFacet mf, int order, int total, LightSource[] lights, double[] out, double[] result)
          Accumulates light contributions from set of light sources through the given MicroFacet (point on surface of some solid) to the viewing direction.
protected  double mono(double[] in, double[] out, double[] normal, PhongMaterial d, int mask)
          Common computation for monochrome BRDF sample (BRDF is treated as monochrome).
 double monoBRDF(double[] in, double[] out, double[] normal, Property data, int mask)
          Returns the requested BRDF sample (BRDF is treated as monochrome).
 double monoBRDF(MicroFacet mf, double[] in, double[] out, int mask)
          Returns the requested BRDF sample (BRDF is treated as monochrome).
 void setColor(double[] color, Property data)
          Sets the actual color (for the given BRDF data).
static int setTemplate(Template t, int ord)
          General-purpose registration routine.
 
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, 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

TEMPLATE_NAME

protected static final String TEMPLATE_NAME
Object template identifier.

See Also:
Constant Field Values

CATEGORY

protected static final String CATEGORY
Object category.

See Also:
Constant Field Values

reg

public static final RegPiece reg
Static registration instance for this class. Automatically initialized in class-loading time.

Constructor Detail

PhongModel

public PhongModel()
Method Detail

mono

protected double mono(double[] in,
                      double[] out,
                      double[] normal,
                      PhongMaterial d,
                      int mask)
Common computation for monochrome BRDF sample (BRDF is treated as monochrome).

Parameters:
in - Input ray direction (double[3] or double[4]).
out - Output (viewing) ray direction (double[3] or double[4]).
d - BRDF parameters.
mask - Which light components are to be computed?
Returns:
BRDF coefficient f(in->out).

color

protected double[] color(double[] in,
                         double[] out,
                         double[] normal,
                         PhongMaterial d,
                         int mask,
                         double[] result)
Common computation for color BRDF sample (BRDF is treated as band-color).

Parameters:
in - Input ray direction (double[3] or double[4]).
out - Output (viewing) ray direction (double[3] or double[4]).
normal - Normal vector of a surface.
d - BRDF parameters.
mask - Which light components are to be computed?
result - Pre-allocated double[C] array to hold BRDF coefficients f(in->out) (C can be either 1 /for monochrome computing/, 3 /for RGB color system/ or greater /for more complex spectral color sampling/). Can be null.
Returns:
Output BRDF spectral coefficients.

createMaterial

public Property createMaterial()
Create material object for the Phong shading model. All data are initialized to their default values.

Specified by:
createMaterial in interface LightModel
Returns:
Data object representing the requested material.

monoBRDF

public double monoBRDF(double[] in,
                       double[] out,
                       double[] normal,
                       Property data,
                       int mask)
Returns the requested BRDF sample (BRDF is treated as monochrome).

Specified by:
monoBRDF in interface LightModel
Parameters:
in - Input ray direction (double[3] or double[4]).
out - Output (viewing) ray direction (double[3] or double[4]).
normal - Normal vector of a surface.
data - Non-mandatory data object to hold BRDF state information.
mask - Which light components are to be computed?
Returns:
BRDF coefficient f(in->out).
See Also:
monoBRDF(MicroFacet,double[],double[],int), colorBRDF(double[],double[],double[],Property,int,double[])

monoBRDF

public double monoBRDF(MicroFacet mf,
                       double[] in,
                       double[] out,
                       int mask)
Returns the requested BRDF sample (BRDF is treated as monochrome). Computations are done relatively to the given MicroFacet (point on surface of some solid).

Specified by:
monoBRDF in interface LightModel
Parameters:
mf - The MicroFacet (point on surface of some solid).
in - Input ray direction (double[3] or double[4]).
out - Output (viewing) ray direction (double[3] or double[4]).
mask - Which light components are to be computed?
Returns:
BRDF coefficient f(in->mf->out).
See Also:
monoBRDF(double[],double[],double[],Property,int), colorBRDF(MicroFacet,double[],double[],int,double[]), MicroFacet.material

colorBRDF

public double[] colorBRDF(double[] in,
                          double[] out,
                          double[] normal,
                          Property data,
                          int mask,
                          double[] result)
Returns the requested BRDF sample (BRDF is treated as band-color).

Specified by:
colorBRDF in interface LightModel
Parameters:
in - Input ray direction (double[3] or double[4]).
out - Output (viewing) ray direction (double[3] or double[4]).
normal - Normal vector of a surface.
data - Non-mandatory data object to hold BRDF state information.
mask - Which light components are to be computed?
result - Pre-allocated double[C] array to hold BRDF coefficients f(in->out) (C can be either 1 /for monochrome computing/, 3 /for RGB color system/ or greater /for more complex spectral color sampling/). Can be null.
Returns:
Output BRDF spectral coefficients.
See Also:
monoBRDF(double[],double[],double[],Property,int), colorBRDF(MicroFacet,double[],double[],int,double[])

colorBRDF

public double[] colorBRDF(MicroFacet mf,
                          double[] in,
                          double[] out,
                          int mask,
                          double[] result)
Returns the requested BRDF sample (BRDF is treated as band-color). Computations are done relatively to the given MicroFacet (point on surface of some solid).

Specified by:
colorBRDF in interface LightModel
Parameters:
mf - The MicroFacet (point on surface of some solid).
in - Input ray direction (double[3] or double[4]).
out - Output (viewing) ray direction (double[3] or double[4]).
mask - Which light components are to be computed?
result - Pre-allocated double[C] array to hold BRDF coefficients f(in->mf->out) (C can be either 1 /for monochrome computing/, 3 /for RGB color system/ or greater /for more complex spectral color sampling/). Can be null.
Returns:
Output BRDF spectral coefficients.
See Also:
monoBRDF(MicroFacet,double[],double[],int), colorBRDF(double[],double[],double[],Property,int,double[]), MicroFacet.material

lightSum

public double[] lightSum(MicroFacet mf,
                         int order,
                         int total,
                         LightSource[] lights,
                         double[] out,
                         double[] result)
Accumulates light contributions from set of light sources through the given MicroFacet (point on surface of some solid) to the viewing direction.

Specified by:
lightSum in interface LightModel
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.
lights - Set of light sources that can light the point.
out - Output (viewing) ray direction (double[3] or double[4]).
result - Pre-allocated double[C] array to hold BRDF coefficients f(in->mf->out) (C can be either 1 /for monochrome computing/, 3 /for RGB color system/ or greater /for more complex spectral color sampling/). Can be null, otherwise the initial value will be preseved.
Returns:
Output color coefficients.
See Also:
colorBRDF(MicroFacet,double[],double[],int,double[]), MicroFacet.material

getOrigColor

public double[] getOrigColor(double[] color,
                             Property data)
Retrieves the original color (defining surface color).

Specified by:
getOrigColor in interface LightModel
Parameters:
color - Pre-allocated double[C] array to hold the color (C can be either 1 /for monochrome computing/, 3 /for RGB color system/ or greater /for more complex spectral color sampling/). Can be null.
data - Data object with BRDF state information (optional).
Returns:
Array containing copy of original color (can be altered).

setColor

public void setColor(double[] color,
                     Property data)
Sets the actual color (for the given BRDF data). This color will be used in subsequent BRDF calculations. The color array won't be altered.

Specified by:
setColor in interface LightModel
Parameters:
color - Color definition - double[C] array (C can be either 1 /for monochrome computing/, 3 /for RGB color system/ or greater /for more complex spectral color sampling/).
data - Data object with BRDF state information.

setTemplate

public static int setTemplate(Template t,
                              int ord)
General-purpose registration routine. Sets all plugs, strings, etc. to the given Template.