public class LightPortrayal3D extends SimplePortrayal3D
In fact, the default objects provided in the simulator (such as SpherePortrayal3D) don't respond to light at all -- they
just display themselves with their given color as if there were a magical light source. To get them to respond
in a different fashion, you'll need to provide them with a different Appearance object, and set that Appearance's
ColoringAttributes and Material. Here's an example which makes a green sphere that's harshly lit only on the side where it receives light, else it's jet black.
Color3f color = new Color3f(Color.green);
Appearance appearance = new Appearance();
new ColoringAttributes(color, ColoringAttributes.SHADE_GOURAUD));
Material m= new Material();
SpherePortrayal3D sphere = new SpherePortrayal3D(appearance, 1.0f);
|Constructor and Description|
Provide your own Light!
|Modifier and Type||Method and Description|
Provides a TransformGroup which defines the node(s) to place in the scenegraph.
appearanceForColor, appearanceForColors, appearanceForImage, clearPickableFlags, getCurrentDisplay, getCurrentFieldPortrayal, getCurrentGUIState, getInspector, getName, getStatus, isSelected, polygonAttributes, setAppearanceFlags, setCurrentDisplay, setCurrentFieldPortrayal, setPickableFlags, setPickableFlags, setSelected
public LightPortrayal3D(java.awt.Color color, Double3D direction)
public LightPortrayal3D(java.awt.Color color)
public LightPortrayal3D(java.awt.Color color, Double3D position, float constantAttenuation, float linearAttenuation, float quadraticAttenuation)
public LightPortrayal3D(javax.media.j3d.Light light)
public javax.media.j3d.TransformGroup getModel(java.lang.Object obj, javax.media.j3d.TransformGroup j3dModel)
You should hang your model off of the TransformGroup provided. You should not transform that TransformGroup in any way -- it is used elsewhere. Instead if you wish to transform your model (rotate it etc.) you should add your own additional TransformGroup as necessary.
The provided TransformGroup can be null; in this case you need to create and return the outer TransformGroup for the object. If the provided TransformGroup is non-null, you should modify it and return the same.
SimplePortrayals should assume the following contract: at the point that getModel(...) is called, the field portrayal and display will have already been set if it exists, else it will be null.