# Class SpotLight

java.lang.Object
javafx.scene.Node
javafx.scene.LightBase
javafx.scene.PointLight
javafx.scene.SpotLight

All Implemented Interfaces:
  `Styleable, EventTarget`

public class SpotLight extends PointLight
A light source that radiates light in a cone in a specific direction away from itself. The direction is defined by the `direction` vector property.

In addition to the attenuation factors that control the light intensity over distance, a `SpotLight` has a light-cone attenuation factor, `spot`, that is determined by 3 properties:

- `innerAngle`: the angle of the inner cone (see image below)
- `outerAngle`: the angle of the outer cone (see image below)
- `falloff`: the factor that controls the light's intensity drop inside the outer cone

The valid ranges for these properties are `0 <= innerAngle <= outerAngle <= 180` and `falloff >= 0`; values outside either of these ranges can produce unexpected results.

The angle of a point to the light is defined as the angle between its vector to the light's position and the direction of the light. For such an angle `theta`, if

- `theta < innerAngle` then `spot = 1`
- `theta > outerAngle` then `spot = 0`
- `innerAngle <= theta <= outerAngle` then

      spot = pow((cos(theta) - cos(outer)) / (cos(inner) - cos(outer)), falloff)

  which represents a drop in intensity from the inner angle to the outer angle.

As a result, `0 <= spot <= 1`. The overall intensity of the light is `I = lambert * atten * spot`.

`SpotLight`s can represent point-like light sources with directionality. Flashlights and floodlights are common light sources that can be simulated with this light type.

Since:
  17
See Also:
  - `PhongMaterial`

- ## Property Summary

  Properties
  Type
  Property
  Description
  `final ObjectProperty<Point3D>`
  `direction`
  The direction vector of the spotlight.
  `final DoubleProperty`
  `falloff`
  The intensity falloff factor of the spotlight's outer cone.
  `final DoubleProperty`
  `innerAngle`
  The angle of the spotlight's inner cone, in degrees.
  `final DoubleProperty`
  `outerAngle`
  The angle of the spotlight's outer cone, in degrees (as shown in the class doc image).

  ### Properties declared in class PointLight

  `constantAttenuation, linearAttenuation, maxRange, quadraticAttenuation`

  ### Properties declared in class LightBase

  `color, lightOn`

  ### Properties declared in class Node

  `accessibleHelp, accessibleRoleDescription, accessibleRole, accessibleText, blendMode, boundsInLocal, boundsInParent, cacheHint, cache, clip, cursor, depthTest, disabled, disable, effectiveNodeOrientation, effect, eventDispatcher, focused, focusTraversable, focusVisible, focusWithin, hover, id, inputMethodRequests, layoutBounds, layoutX, layoutY, localToParentTransform, localToSceneTransform, managed, mouseTransparent, nodeOrientation, onContextMenuRequested, onDragDetected, onDragDone, onDragDropped, onDragEntered, onDragExited, onDragOver, onInputMethodTextChanged, onKeyPressed, onKeyReleased, onKeyTyped, onMouseClicked, onMouseDragDone, onMouseDragEntered, onMouseDragExited, onMouseDragged, onMouseDragOver, onMouseDragReleased, onMouseEntered, onMouseExited, onMouseMoved, onMousePressed, onMouseReleased, onRotate, onRotationFinished, onRotationStarted, onScrollFinished, onScroll, onScrollStarted, onSwipeDown, onSwipeLeft, onSwipeRight, onSwipeUp, onTouchMoved, onTouchPressed, onTouchReleased, onTouchStationary, onZoomFinished, onZoom, onZoomStarted, opacity, parent, pickOnBounds, pressed, rotate, rotationAxis, scaleX, scaleY, scaleZ, scene, style, translateX, translateY, translateZ, viewOrder, visible`

- ## Field Summary

  ### Fields declared in class Node

  `BASELINE_OFFSET_SAME_AS_HEIGHT`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `SpotLight()`
  Creates a new instance of `SpotLight` class with a default `Color.WHITE` light source.
  `SpotLight(Color color)`
  Creates a new instance of `SpotLight` class using the specified color.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `final ObjectProperty<Point3D>`
  `directionProperty()`
  The direction vector of the spotlight.
  `final DoubleProperty`
  `falloffProperty()`
  The intensity falloff factor of the spotlight's outer cone.
  `final Point3D`
  `getDirection()`
  Gets the value of the `direction` property.
  `final double`
  `getFalloff()`
  Gets the value of the `falloff` property.
  `final double`
  `getInnerAngle()`
  Gets the value of the `innerAngle` property.
  `final double`
  `getOuterAngle()`
  Gets the value of the `outerAngle` property.
  `final DoubleProperty`
  `innerAngleProperty()`
  The angle of the spotlight's inner cone, in degrees.
  `final DoubleProperty`
  `outerAngleProperty()`
  The angle of the spotlight's outer cone, in degrees (as shown in the class doc image).
  `final void`
  `setDirection(Point3D value)`
  Sets the value of the `direction` property.
  `final void`
  `setFalloff(double value)`
  Sets the value of the `falloff` property.
  `final void`
  `setInnerAngle(double value)`
  Sets the value of the `innerAngle` property.
  `final void`
  `setOuterAngle(double value)`
  Sets the value of the `outerAngle` property.

  ### Methods declared in class PointLight

  `constantAttenuationProperty, getConstantAttenuation, getLinearAttenuation, getMaxRange, getQuadraticAttenuation, linearAttenuationProperty, maxRangeProperty, quadraticAttenuationProperty, setConstantAttenuation, setLinearAttenuation, setMaxRange, setQuadraticAttenuation`

  ### Methods declared in class LightBase

  `colorProperty, getColor, getExclusionScope, getScope, isLightOn, lightOnProperty, setColor, setLightOn`

  ### Methods declared in class Node

  `accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, executeAccessibleAction, fireEvent, focusedProperty, focusTraversableProperty, focusVisibleProperty, focusWithinProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBaselineOffset, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClassCssMetaData, getClip, getContentBias, getCssMetaData, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInitialFocusTraversable, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragDone, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isFocusVisible, isFocusWithin, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isResizable, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookup, lookupAll, managedProperty, maxHeight, maxWidth, minHeight, minWidth, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragDoneProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, prefHeight, prefWidth, pressedProperty, pseudoClassStateChanged, queryAccessibleAttribute, relocate, removeEventFilter, removeEventHandler, requestFocus, requestFocusTraversal, resize, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragDone, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty`

  ### Methods declared in class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

  ### Methods declared in interface Styleable

  `getStyleableNode`

- ## Property Details

  - ### direction

    public final ObjectProperty<Point3D> directionProperty
    The direction vector of the spotlight. It can be rotated by setting a rotation transform on the `SpotLight`. The vector need not be normalized.
    Default value:
      `Point3D(0, 0, 1)`
    See Also:
      - `getDirection()`
      - `setDirection(Point3D)`
      - `directionProperty()`

  - ### innerAngle

    public final DoubleProperty innerAngleProperty
    The angle of the spotlight's inner cone, in degrees. A point whose angle to the light is less than this angle is not attenuated by the spotlight factor (`spot = 1`). At larger angles, the light intensity starts to drop. See the class doc for more information.

    The valid range is `0 <= innerAngle <= outerAngle`; values outside of this range can produce unexpected results.

    Default value:
      0
    See Also:
      - `getInnerAngle()`
      - `setInnerAngle(double)`
      - `innerAngleProperty()`

  - ### outerAngle

    public final DoubleProperty outerAngleProperty
    The angle of the spotlight's outer cone, in degrees (as shown in the class doc image). A point whose angle to the light is greater than this angle receives no light (`spot = 0`). A point whose angle to the light is less than the outer angle but greater than the inner angle receives partial intensity governed by the falloff factor. See the class doc for more information.

    The valid range is `innerAngle <= outerAngle <= 180`; values outside of this range can produce unexpected results.

    Default value:
      30
    See Also:
      - `getOuterAngle()`
      - `setOuterAngle(double)`
      - `outerAngleProperty()`

  - ### falloff

    public final DoubleProperty falloffProperty
    The intensity falloff factor of the spotlight's outer cone. A point whose angle to the light is greater than the inner angle but less than the outer angle receives partial intensity governed by this factor. The larger the falloff, the sharper the drop in intensity from the inner cone. A falloff factor of 1 gives a linear drop in intensity, values greater than 1 give a convex drop, and values smaller than 1 give a concave drop. See the class doc for more information.

    The valid range is `0 <= falloff`; values outside of this range can produce unexpected results.

    Default value:
      1
    See Also:
      - `getFalloff()`
      - `setFalloff(double)`
      - `falloffProperty()`

- ## Constructor Details

  - ### SpotLight

    public SpotLight()
    Creates a new instance of `SpotLight` class with a default `Color.WHITE` light source.

  - ### SpotLight

    public SpotLight(Color color)
    Creates a new instance of `SpotLight` class using the specified color.
    Parameters:
      `color` - the color of the light source

- ## Method Details

  - ### setDirection

    public final void setDirection(Point3D value)
    Sets the value of the `direction` property.
    Property description:
      The direction vector of the spotlight. It can be rotated by setting a rotation transform on the `SpotLight`. The vector need not be normalized.
    Default value:
      `Point3D(0, 0, 1)`
    Parameters:
      `value` - the value for the `direction` property
    See Also:
      - `getDirection()`
      - `directionProperty()`

  - ### getDirection

    public final Point3D getDirection()
    Gets the value of the `direction` property.
    Property description:
      The direction vector of the spotlight. It can be rotated by setting a rotation transform on the `SpotLight`. The vector need not be normalized.
    Default value:
      `Point3D(0, 0, 1)`
    Returns:
      the value of the `direction` property
    See Also:
      - `setDirection(Point3D)`
      - `directionProperty()`

  - ### directionProperty

    public final ObjectProperty<Point3D> directionProperty()
    The direction vector of the spotlight. It can be rotated by setting a rotation transform on the `SpotLight`. The vector need not be normalized.
    Default value:
      `Point3D(0, 0, 1)`
    Returns:
      the `direction` property
    See Also:
      - `getDirection()`
      - `setDirection(Point3D)`

  - ### setInnerAngle

    public final void setInnerAngle(double value)
    Sets the value of the `innerAngle` property.
    Property description:
      The angle of the spotlight's inner cone, in degrees. A point whose angle to the light is less than this angle is not attenuated by the spotlight factor (`spot = 1`). At larger angles, the light intensity starts to drop. See the class doc for more information.

      The valid range is `0 <= innerAngle <= outerAngle`; values outside of this range can produce unexpected results.

    Default value:
      0
    Parameters:
      `value` - the value for the `innerAngle` property
    See Also:
      - `getInnerAngle()`
      - `innerAngleProperty()`

  - ### getInnerAngle

    public final double getInnerAngle()
    Gets the value of the `innerAngle` property.
    Property description:
      The angle of the spotlight's inner cone, in degrees. A point whose angle to the light is less than this angle is not attenuated by the spotlight factor (`spot = 1`). At larger angles, the light intensity starts to drop. See the class doc for more information.

      The valid range is `0 <= innerAngle <= outerAngle`; values outside of this range can produce unexpected results.

    Default value:
      0
    Returns:
      the value of the `innerAngle` property
    See Also:
      - `setInnerAngle(double)`
      - `innerAngleProperty()`

  - ### innerAngleProperty

    public final DoubleProperty innerAngleProperty()
    The angle of the spotlight's inner cone, in degrees. A point whose angle to the light is less than this angle is not attenuated by the spotlight factor (`spot = 1`). At larger angles, the light intensity starts to drop. See the class doc for more information.

    The valid range is `0 <= innerAngle <= outerAngle`; values outside of this range can produce unexpected results.

    Default value:
      0
    Returns:
      the `innerAngle` property
    See Also:
      - `getInnerAngle()`
      - `setInnerAngle(double)`

  - ### setOuterAngle

    public final void setOuterAngle(double value)
    Sets the value of the `outerAngle` property.
    Property description:
      The angle of the spotlight's outer cone, in degrees (as shown in the class doc image). A point whose angle to the light is greater than this angle receives no light (`spot = 0`). A point whose angle to the light is less than the outer angle but greater than the inner angle receives partial intensity governed by the falloff factor. See the class doc for more information.

      The valid range is `innerAngle <= outerAngle <= 180`; values outside of this range can produce unexpected results.

    Default value:
      30
    Parameters:
      `value` - the value for the `outerAngle` property
    See Also:
      - `getOuterAngle()`
      - `outerAngleProperty()`

  - ### getOuterAngle

    public final double getOuterAngle()
    Gets the value of the `outerAngle` property.
    Property description:
      The angle of the spotlight's outer cone, in degrees (as shown in the class doc image). A point whose angle to the light is greater than this angle receives no light (`spot = 0`). A point whose angle to the light is less than the outer angle but greater than the inner angle receives partial intensity governed by the falloff factor. See the class doc for more information.

      The valid range is `innerAngle <= outerAngle <= 180`; values outside of this range can produce unexpected results.

    Default value:
      30
    Returns:
      the value of the `outerAngle` property
    See Also:
      - `setOuterAngle(double)`
      - `outerAngleProperty()`

  - ### outerAngleProperty

    public final DoubleProperty outerAngleProperty()
    The angle of the spotlight's outer cone, in degrees (as shown in the class doc image). A point whose angle to the light is greater than this angle receives no light (`spot = 0`). A point whose angle to the light is less than the outer angle but greater than the inner angle receives partial intensity governed by the falloff factor. See the class doc for more information.

    The valid range is `innerAngle <= outerAngle <= 180`; values outside of this range can produce unexpected results.

    Default value:
      30
    Returns:
      the `outerAngle` property
    See Also:
      - `getOuterAngle()`
      - `setOuterAngle(double)`

  - ### setFalloff

    public final void setFalloff(double value)
    Sets the value of the `falloff` property.
    Property description:
      The intensity falloff factor of the spotlight's outer cone. A point whose angle to the light is greater than the inner angle but less than the outer angle receives partial intensity governed by this factor. The larger the falloff, the sharper the drop in intensity from the inner cone. A falloff factor of 1 gives a linear drop in intensity, values greater than 1 give a convex drop, and values smaller than 1 give a concave drop. See the class doc for more information.

      The valid range is `0 <= falloff`; values outside of this range can produce unexpected results.

    Default value:
      1
    Parameters:
      `value` - the value for the `falloff` property
    See Also:
      - `getFalloff()`
      - `falloffProperty()`

  - ### getFalloff

    public final double getFalloff()
    Gets the value of the `falloff` property.
    Property description:
      The intensity falloff factor of the spotlight's outer cone. A point whose angle to the light is greater than the inner angle but less than the outer angle receives partial intensity governed by this factor. The larger the falloff, the sharper the drop in intensity from the inner cone. A falloff factor of 1 gives a linear drop in intensity, values greater than 1 give a convex drop, and values smaller than 1 give a concave drop. See the class doc for more information.

      The valid range is `0 <= falloff`; values outside of this range can produce unexpected results.

    Default value:
      1
    Returns:
      the value of the `falloff` property
    See Also:
      - `setFalloff(double)`
      - `falloffProperty()`

  - ### falloffProperty

    public final DoubleProperty falloffProperty()
    The intensity falloff factor of the spotlight's outer cone. A point whose angle to the light is greater than the inner angle but less than the outer angle receives partial intensity governed by this factor. The larger the falloff, the sharper the drop in intensity from the inner cone. A falloff factor of 1 gives a linear drop in intensity, values greater than 1 give a convex drop, and values smaller than 1 give a concave drop. See the class doc for more information.

    The valid range is `0 <= falloff`; values outside of this range can produce unexpected results.

    Default value:
      1
    Returns:
      the `falloff` property
    See Also:
      - `getFalloff()`
      - `setFalloff(double)`