APIdia Launch Partner
Top Description Fields Constructors Methods
javafx.scene

public abstract sealed Class LightBase

extends Node
permits AmbientLight, DirectionalLight, PointLight
Class Inheritance
Known Direct Subclasses
javafx.scene.PointLight, javafx.scene.AmbientLight, javafx.scene.DirectionalLight
Imports
com.sun.javafx.collections.TrackableObservableList, com.sun.javafx.geom.BaseBounds, .BoxBounds, com.sun.javafx.geom.transform.Affine3D, .BaseTransform, com.sun.javafx.scene.DirtyBits, .LightBaseHelper, .NodeHelper, com.sun.javafx.scene.transform.TransformHelper, com.sun.javafx.sg.prism.NGLightBase, .NGNode, com.sun.javafx.tk.Toolkit, java.util.List, java.util.stream.Collectors, javafx.application.ConditionalFeature, .Platform, javafx.beans.property.BooleanProperty, .DoubleProperty, .ObjectProperty, .SimpleBooleanProperty, .SimpleDoubleProperty, .SimpleObjectProperty, javafx.collections.ListChangeListener.Change, .ObservableList, javafx.scene.paint.Color, javafx.scene.shape.Shape3D, com.sun.javafx.logging.PlatformLogger

The 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: In addition to these, each light type supports a different set of properties, summarized in the following table:
Summary of Light types by attributes
Light type Rotation and Direction Location and Attenuation
AmbientLight ✗ ✗
DirectionalLight ✓ ✗
PointLight ✗ ✓
SpotLight* ✓ ✓
* Supports spotlight attenuation factors as described in its class docs.

All light types are not affected by scaling and shearing transforms.

Color

A light source produces a light of a single color. The appearance of an object illuminated by the light is a result of the color of the light and the material the object is made of. For example, for a blue light, a white object will appear blue, a black object will appear black, and a (255, 0, 255)-colored object will appear blue, as the light "selects" only the blue component of the material color. The mathematical definition of the material-light interaction is available in PhongMaterial.

See also the implementation notes section.

Scopes

A light has a 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

The direction of the light is defined by the 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.

Distance Attenuation

Any pixel within the range of the light will be illuminated by it (unless it belongs to a 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.SCENE3D for more information.

Implementation Note

The following applies to the color property of the light:

  1. A black colored light is ignored since its contribution is 0.
  2. The transparency (alpha) component of a light is ignored.
These behaviors are not specified and could change in the future.
Since
JavaFX 8.0

Field Summary

Modifier and TypeField and Description
private ObjectProperty<Color>
color

Specifies the color of light source.

private ObservableList<Node>
private BooleanProperty
lightOn

Defines the light on or off.

private Affine3D
private ObservableList<Node>
Inherited from javafx.scene.Node:
accessibilityPropertiesaccessibleBASELINE_OFFSET_SAME_AS_HEIGHTboundsChangedcssFlagfocusVisiblepseudoClassStatesstyleHelper

Constructor Summary

AccessConstructor and Description
protected
LightBase()

Creates a new instance of LightBase class with a default Color.WHITE light source.

protected
LightBase(Color
the color of the light source
color
)

Creates a new instance of LightBase class using the specified color.

Method Summary

Modifier and TypeMethod and Description
public final ObjectProperty<Color>
private boolean
doComputeContains(double localX, double localY)

private BaseBounds
private void
doMarkDirty(DirtyBits dirtyBit)

Hides javafx.scene.Node.doMarkDirty.

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

Returns:

the list of nodes that specifies the hierarchical exclusion scope of this light
getExclusionScope
()

Gets the list of nodes that specifies the hierarchical exclusion scope of this light.

pack-priv DoubleProperty
getLightDoubleProperty(String name, double initialValue)

For use by implementing subclasses.

public ObservableList<Node>

Returns:

the list of nodes that specifies the hierarchical scope of this light
getScope
()

Gets 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.scene.Node.scenesChanged.

Exists for Parent and LightBase

public final void
setColor(Color value)

public final void
setLightOn(boolean value)

Inherited from javafx.scene.Node:
accessibleHelpPropertyaccessibleRoleDescriptionPropertyaccessibleRolePropertyaccessibleTextPropertyaddEventFilteraddEventHandleralmostZeroapplyCssautosizeblendModePropertyboundedSizeboundsInLocalPropertyboundsInParentPropertybuildEventDispatchChaincacheHintPropertycachePropertyclearDirtyclearInitialCssStateFlagclipPropertycompleteTransitionTimerscomputeAreaInScreencomputeDerivedDepthTestcontainscontainscursorPropertydepthTestPropertydisabledPropertydisablePropertyeffectiveNodeOrientationPropertyeffectPropertyeventDispatcherPropertyexecuteAccessibleActionfindStylesfireEventfocusedPropertyfocusTraversablePropertyfocusVisiblePropertyfocusWithinPropertygetAccessiblegetAccessibleHelpgetAccessibleRolegetAccessibleRoleDescriptiongetAccessibleTextgetBaselineOffsetgetBlendModegetBoundsInLocalgetBoundsInParentgetCacheHintgetClassCssMetaDatagetClipgetClipParentgetContentBiasgetCSSFlagsgetCssMetaDatagetCurrentLocalToSceneTransformStategetCursorgetDepthTestgetEffectgetEffectiveNodeOrientationgetEventDispatchergetGeomBoundsgetIdgetInitialCursorgetInitialFocusTraversablegetInputMethodRequestsgetLayoutBoundsgetLayoutXgetLayoutYgetLeafTransformgetLocalBoundsgetLocalToParentTransformgetLocalToParentTransformgetLocalToSceneTransformgetMatchingStylesgetNodeOrientationgetOnContextMenuRequestedgetOnDragDetectedgetOnDragDonegetOnDragDroppedgetOnDragEnteredgetOnDragExitedgetOnDragOvergetOnInputMethodTextChangedgetOnKeyPressedgetOnKeyReleasedgetOnKeyTypedgetOnMouseClickedgetOnMouseDragDonegetOnMouseDragEnteredgetOnMouseDragExitedgetOnMouseDraggedgetOnMouseDragOvergetOnMouseDragReleasedgetOnMouseEnteredgetOnMouseExitedgetOnMouseMovedgetOnMousePressedgetOnMouseReleasedgetOnRotategetOnRotationFinishedgetOnRotationStartedgetOnScrollgetOnScrollFinishedgetOnScrollStartedgetOnSwipeDowngetOnSwipeLeftgetOnSwipeRightgetOnSwipeUpgetOnTouchMovedgetOnTouchPressedgetOnTouchReleasedgetOnTouchStationarygetOnZoomgetOnZoomFinishedgetOnZoomStartedgetOpacitygetParentgetPeergetPivotXgetPivotYgetPivotZgetPropertiesgetPseudoClassStatesgetRotategetRotationAxisgetScaleXgetScaleYgetScaleZgetScenegetStylegetStyleableParentgetStyleClassgetStyleMapgetSubScenegetTransformedBoundsgetTransformsgetTransitionDefinitionsgetTransitionTimersgetTranslateXgetTranslateYgetTranslateZgetTypeSelectorgetUserDatagetViewOrderhasMirroringhasPropertieshoverPropertyidPropertyindentinputMethodRequestsPropertyintersectsintersectsintersectsintersectsBoundsisCacheisCanReceiveFocusisConnectedisDerivedDepthTestisDirtyisDisableisDisabledisFocusedisFocusTraversableisFocusVisibleisFocusWithinisHoverisManagedisMouseTransparentisPickOnBoundsisPressedisResizableisShowMnemonicsisTreeShowingisTreeVisibleisVisiblelayoutBoundsChangedlayoutBoundsPropertylayoutXPropertylayoutYPropertylocalBoundsChangedlocalToParentlocalToParentlocalToParentlocalToParentlocalToParentlocalToParentlocalToParentlocalToParentTransformPropertylocalToScenelocalToScenelocalToScenelocalToScenelocalToScenelocalToScenelocalToScenelocalToScenelocalToScenelocalToScenelocalToScenelocalToScenelocalToSceneTransformPropertylocalToScreenlocalToScreenlocalToScreenlocalToScreenlocalToScreenlookuplookupAlllookupAllmanagedPropertymarkDirtyLayoutBranchmaxHeightmaxWidthminHeightminWidthmouseTransparentPropertynodeOrientationPropertynodeResolvedOrientationChangednodeResolvedOrientationInvalidatednotifyAccessibleAttributeChangednotifyFocusListenersnotifyManagedChangednotifyParentOfBoundsChangenotifyParentsOfInvalidatedCSSonContextMenuRequestedPropertyonDragDetectedPropertyonDragDonePropertyonDragDroppedPropertyonDragEnteredPropertyonDragExitedPropertyonDragOverPropertyonInputMethodTextChangedPropertyonKeyPressedPropertyonKeyReleasedPropertyonKeyTypedPropertyonMouseClickedPropertyonMouseDragDonePropertyonMouseDragEnteredPropertyonMouseDragExitedPropertyonMouseDraggedPropertyonMouseDragOverPropertyonMouseDragReleasedPropertyonMouseEnteredPropertyonMouseExitedPropertyonMouseMovedPropertyonMousePressedPropertyonMouseReleasedPropertyonRotatePropertyonRotationFinishedPropertyonRotationStartedPropertyonScrollFinishedPropertyonScrollPropertyonScrollStartedPropertyonSwipeDownPropertyonSwipeLeftPropertyonSwipeRightPropertyonSwipeUpPropertyonTouchMovedPropertyonTouchPressedPropertyonTouchReleasedPropertyonTouchStationaryPropertyonZoomFinishedPropertyonZoomPropertyonZoomStartedPropertyopacityPropertyparentPropertyparentResolvedOrientationInvalidatedparentToLocalparentToLocalparentToLocalparentToLocalparentToLocalparentToLocalparentToLocalpickNodepickOnBoundsPropertyprefHeightprefWidthpressedPropertyprocessCSSpseudoClassStateChangedqueryAccessibleAttributereapplyCSSrecalculateRelativeSizePropertiesreleaseAccessiblerelocateremoveEventFilterremoveEventHandlerrequestFocusrequestFocusTraversalresizeresizeRelocaterotatePropertyrotationAxisPropertyscaleXPropertyscaleYPropertyscaleZPropertyscenePropertysceneToLocalsceneToLocalsceneToLocalsceneToLocalsceneToLocalsceneToLocalsceneToLocalsceneToLocalsceneToLocalsceneToLocalscreenToLocalscreenToLocalscreenToLocalsetAccessibleHelpsetAccessibleRolesetAccessibleRoleDescriptionsetAccessibleTextsetBlendModesetCachesetCacheHintsetClipsetCursorsetDepthTestsetDerivedDepthTestsetDisablesetDisabledsetEffectsetEventDispatchersetEventHandlersetFocusedsetFocusQuietlysetFocusTraversablesetHoversetIdsetInputMethodRequestssetLayoutXsetLayoutYsetManagedsetMouseTransparentsetNodeOrientationsetOnContextMenuRequestedsetOnDragDetectedsetOnDragDonesetOnDragDroppedsetOnDragEnteredsetOnDragExitedsetOnDragOversetOnInputMethodTextChangedsetOnKeyPressedsetOnKeyReleasedsetOnKeyTypedsetOnMouseClickedsetOnMouseDragDonesetOnMouseDragEnteredsetOnMouseDragExitedsetOnMouseDraggedsetOnMouseDragOversetOnMouseDragReleasedsetOnMouseEnteredsetOnMouseExitedsetOnMouseMovedsetOnMousePressedsetOnMouseReleasedsetOnRotatesetOnRotationFinishedsetOnRotationStartedsetOnScrollsetOnScrollFinishedsetOnScrollStartedsetOnSwipeDownsetOnSwipeLeftsetOnSwipeRightsetOnSwipeUpsetOnTouchMovedsetOnTouchPressedsetOnTouchReleasedsetOnTouchStationarysetOnZoomsetOnZoomFinishedsetOnZoomStartedsetOpacitysetParentsetPickOnBoundssetPressedsetRotatesetRotationAxissetScaleXsetScaleYsetScaleZsetScenessetShowMnemonicssetStylesetStyleMapsetTranslateXsetTranslateYsetTranslateZsetTreeVisiblesetUserDatasetViewOrdersetVisibleshowMnemonicsPropertysnapshotsnapshotstartDragAndDropstartFullDragstylePropertysyncPeertoBacktoFronttoStringtransformedBoundsChangedtranslateXPropertytranslateYPropertytranslateZPropertytraversetreeVisiblePropertyupdateBoundsupdateGeomBoundsupdateLocalToParentTransformupdateTxBoundsusesMirroringviewOrderPropertyvisiblePropertywouldCreateCycle

Field Detail

colorback to summary
private ObjectProperty<Color> color

Specifies the color of light source.

Default Value
null
exclusionScopeback to summary
private ObservableList<Node> exclusionScope
lightOnback to summary
private BooleanProperty lightOn

Defines the light on or off.

Default Value
true
localToSceneTxback to summary
private Affine3D localToSceneTx
scopeback to summary
private ObservableList<Node> scope

Constructor Detail

LightBaseback to summary
protected LightBase()

Creates a new instance of LightBase class with a default Color.WHITE light source.

LightBaseback to summary
protected LightBase(Color color)

Creates a new instance of LightBase class using the specified color.

Parameters
color:Color

the color of the light source

Method Detail

colorPropertyback to summary
public final ObjectProperty<Color> colorProperty()
doComputeContainsback to summary
private boolean doComputeContains(double localX, double localY)
doComputeGeomBoundsback to summary
private BaseBounds doComputeGeomBounds(BaseBounds bounds, BaseTransform tx)
doMarkDirtyback to summary
private void doMarkDirty(DirtyBits dirtyBit)

Hides javafx.scene.Node.doMarkDirty.

Doc from javafx.scene.Node.doMarkDirty.

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.

doOnChangedback to summary
private void doOnChanged(ListChangeListener.Change<Node> c, ObservableList<Node> otherScope)
doUpdatePeerback to summary
private void doUpdatePeer()

Hides javafx.scene.Node.doUpdatePeer.

getColorback to summary
public final Color getColor()
getExclusionScopeback to summary
public ObservableList<Node> getExclusionScope()

Gets the list of nodes that specifies the hierarchical exclusion scope of this light. Any Shape3Ds in this list or under a Parent in this list are not affected by this light, unless a closer parent exists in the scope list.
This is a convenience list for excluding nodes that would otherwise be in scope of the light.

Returns:ObservableList<Node>

the list of nodes that specifies the hierarchical exclusion scope of this light

Since
13
See Also
getScope
getLightDoublePropertyback 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.

getScopeback to summary
public ObservableList<Node> getScope()

Gets the list of nodes that specifies the hierarchical scope of this light. Any Shape3Ds in this list or under a Parent in this list are affected by this light, unless a closer parent exists in the exclusionScope list. If the list is empty, all nodes under the light's scene/subscene are affected by it (unless they are in the exclusionScope).

Returns:ObservableList<Node>

the list of nodes that specifies the hierarchical scope of this light

See Also
getExclusionScope
isLightOnback to summary
public final boolean isLightOn()
lightOnPropertyback to summary
public final BooleanProperty lightOnProperty()
markChildrenDirtyback 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.

Parameters
node:Node

the node that was added/removed from a scope

markOwnerDirtyback to summary
private void markOwnerDirty()
scenesChangedback to summary
pack-priv void scenesChanged(final Scene newScene, final SubScene newSubScene, final Scene oldScene, final SubScene oldSubScene)

Overrides javafx.scene.Node.scenesChanged.

Doc from javafx.scene.Node.scenesChanged.

Exists for Parent and LightBase

Annotations
@Override
setColorback to summary
public final void setColor(Color value)
setLightOnback to summary
public final void setLightOn(boolean value)