LightBase class is the base class for all objects that represent a form of light source. All light types
share the following common properties that are defined in this class:
color - the color of the light sourcescope - a list of nodes the light source affectsexlusionScope - a list of nodes the light source does not affect| Light type | Rotation and Direction | Location and Attenuation |
|---|---|---|
AmbientLight |
✗ | ✗ |
DirectionalLight |
✓ | ✗ |
PointLight |
✗ | ✓ |
SpotLight* |
✓ | ✓ |
All light types are not affected by scaling and shearing transforms.
PhongMaterial.
See also the implementation notes section.
scope list and an exclusionScope list that define which nodes are illuminated by it and
which aren't. A node can exist in only one of the lists: if it is added to one, it is silently removed from the
other. If a node does not exist in any list, it inherits its affected state from its parent, recursively. An
exception to this is that a light with an empty scope affects all nodes in its scene/subscene implicitly
(except for those in its exlusionScope) as if the root of the scene is in the scope.
The exlusionScope is useful only for nodes that would otherwise be in scope of the light. Excluding a node is
a convenient alternative to traversing the scenegraph hierarchy and adding all of the other nodes to the light's
scope. Instead, the scope can remain wide, and specific nodes can be excluded with the exclusion scope.
direction vector property of the light. The light's
direction can be rotated by setting a rotation transform on the light. For example, if the direction vector is
(1, 1, 1) and the light is not rotated, it will point in the (1, 1, 1) direction, and if the light is
rotated 90 degrees on the y axis, it will point in the (1, 1, -1) direction.
Light types that do not have a direction are not affected by rotation transforms.
Shape3D outside of
its scope). The distance is measured from the light's position to the pixel's position, and is
checked to be within the maximum range of the light, as defined by its maxRange property. The light's
position can be changed by setting a translation transform on the light.
The light's intensity can be set to change over distance by attenuating it. The attenuation formula
attn = 1 / (ca + la * dist + qa * dist^2)
defines 3 coefficients: ca, la, and qa, which control the constant, linear, and quadratic
behaviors of intensity falloff over distance, respectively. The effective color of the light at a given point in
space is color * attn. It is possible, albeit unrealistic, to specify negative values to attenuation
coefficients. This allows the resulting attenuation factor to be negative, which results in the light's color being
subtracted from the material color instead of added to it, thus creating a "shadow caster".
For a realistic effect, maxRange should be set to a distance at which the attenuation is close to 0, as this
will give a soft cutoff.
Light types that are not distance-attenuated are not affected by translation transforms. For these types, a decrease in intensity can be achieved by using a darker color.
Note
this is a conditional feature. See
ConditionalFeature. for more information.
Implementation Note
The following applies to the color property of the light:
| Modifier and Type | Field and Description |
|---|---|
| private ObjectProperty | color
Specifies the color of light source. |
| private ObservableList | |
| private BooleanProperty | lightOn
Defines the light on or off. |
| private Affine3D | |
| private ObservableList |
| Access | Constructor and Description |
|---|---|
| protected | |
| protected |
| Modifier and Type | Method and Description |
|---|---|
| public final ObjectProperty | |
| private boolean | |
| private BaseBounds | |
| private void | doMarkDirty(DirtyBits dirtyBit)
Hides javafx. Mark the specified bit as dirty, and add this node to the scene's dirty list. |
| private void | |
| private void | |
| public final Color | |
| public ObservableList | Returns: the list of nodes that specifies the hierarchical exclusion scope of this lightGets the list of nodes that specifies the hierarchical exclusion scope of this light. |
| pack-priv DoubleProperty | |
| public ObservableList | Returns: the list of nodes that specifies the hierarchical scope of this lightGets the list of nodes that specifies the hierarchical scope of this light. |
| public final boolean | |
| public final BooleanProperty | |
| private void | markChildrenDirty(Node
the node that was added/removed from a scope node)Marks dirty all the 3D shapes that had their scoped/excluded state change. |
| private void | |
| pack-priv void | scenesChanged(final Scene newScene, final SubScene newSubScene, final Scene oldScene, final SubScene oldSubScene)
Overrides javafx. Exists for Parent and LightBase |
| public final void | |
| public final void |
| color | back to summary |
|---|---|
| private ObjectProperty<Color> color Specifies the color of light source.
| |
| exclusionScope | back to summary |
|---|---|
| private ObservableList<Node> exclusionScope | |
| lightOn | back to summary |
|---|---|
| private BooleanProperty lightOn Defines the light on or off.
| |
| localToSceneTx | back to summary |
|---|---|
| private Affine3D localToSceneTx | |
| scope | back to summary |
|---|---|
| private ObservableList<Node> scope | |
| LightBase | back to summary |
|---|---|
| protected LightBase() Creates a new instance of | |
| LightBase | back to summary |
|---|---|
| protected LightBase(Color color) Creates a new instance of
| |
| colorProperty | back to summary |
|---|---|
| public final ObjectProperty | |
| doComputeContains | back to summary |
|---|---|
| private boolean doComputeContains(double localX, double localY) | |
| doComputeGeomBounds | back to summary |
|---|---|
| private BaseBounds doComputeGeomBounds(BaseBounds bounds, BaseTransform tx) | |
| doMarkDirty | back to summary |
|---|---|
| private void doMarkDirty(DirtyBits dirtyBit) Hides javafx. Doc from javafx. Mark the specified bit as dirty, and add this node to the scene's dirty list. Note This method MUST only be called via its accessor method. | |
| doOnChanged | back to summary |
|---|---|
| private void doOnChanged(ListChangeListener. | |
| doUpdatePeer | back to summary |
|---|---|
| private void doUpdatePeer() | |
| getColor | back to summary |
|---|---|
| public final Color getColor() | |
| getExclusionScope | back to summary |
|---|---|
| public ObservableList Gets the list of nodes that specifies the hierarchical exclusion scope of this light. Any
| |
| getLightDoubleProperty | back to summary |
|---|---|
| pack-priv DoubleProperty getLightDoubleProperty(String name, double initialValue) For use by implementing subclasses. Treat as protected. Creates and returns a SimpleDoubleProperty with an invalidation scheme. | |
| getScope | back to summary |
|---|---|
| public ObservableList Gets the list of nodes that specifies the hierarchical scope of this light. Any
| |
| isLightOn | back to summary |
|---|---|
| public final boolean isLightOn() | |
| lightOnProperty | back to summary |
|---|---|
| public final BooleanProperty lightOnProperty() | |
| markChildrenDirty | back to summary |
|---|---|
| private void markChildrenDirty(Node node) Marks dirty all the 3D shapes that had their scoped/excluded state change. The method recursively traverses the given node's graph top-down to find all the leaves (3D shapes). Nodes that are not contained in one of the scope lists inherit their parent's scope, and nodes that are contained in one of the lists override their parent's state. For this reason, when traversing the graph, if a node that is contained in a list is reached, its branch is skipped.
| |
| markOwnerDirty | back to summary |
|---|---|
| private void markOwnerDirty() | |
| scenesChanged | back to summary |
|---|---|
| pack-priv void scenesChanged(final Scene newScene, final SubScene newSubScene, final Scene oldScene, final SubScene oldSubScene) Overrides javafx. Doc from javafx. Exists for Parent and LightBase
| |
| setColor | back to summary |
|---|---|
| public final void setColor(Color value) | |
| setLightOn | back to summary |
|---|---|
| public final void setLightOn(boolean value) | |