Enum Class ProjectedImageryTarget

java.lang.Object
java.lang.Enum<ProjectedImageryTarget>
com.luciad.layers.styles.ProjectedImageryTarget
All Implemented Interfaces:
Serializable, Comparable<ProjectedImageryTarget>, Constable

public enum ProjectedImageryTarget extends Enum<ProjectedImageryTarget>
Determines onto which surfaces projected imagery is projected.

The two options are ProjectedImageryTarget#AllSurfaces and ProjectedImageryTarget#ClosestSurface.

The difference between these is most apparent when the camera is not at a projection position, when transitioning between 2 panoramas or when freely moving the camera for example. In these cases, the camera typically can see things that are not visible in the projection position and thus the imagery does not cover these areas.

When projecting on all surfaces, the resulting view may be somewhat confusing because walls and objects do not block the projection.

When projecting on the closest surface, the geometries in the vicinity of the projection are taken into account. This means that the projection only covers what is actually visible for that projection. For example, if there is a wall in the imagery and that wall is also in the loaded geometry data, the projection will cover the wall but nothing behind the wall. The images below illustrate the difference.

Projection target AllSurfaces
Projection target AllSurfaces
Projection target ClosestSurface
Projection target ClosestSurface

Using ProjectedImageryTarget#ClosestSurface, the projections are painted in 2 distinct steps. This has a consequence for the opacity styling.

  1. First, a base layer is painted. In this layer, when certain areas are in the line of sight of multiple projections, the images of the closest projection are used. So, a single projection is used for every projected pixel but different pixels may be projected from different projections. The base layer is typically used when showing overviews of multiple panoramas or when transitioning between 2 panoramas.
    You can adjust the opacity of the base layer with the baseOpacity property of the style. By default this is set to 0 so only the layer explained next, in item 2, is visible. This makes the default behavior of ProjectedImageryTarget#ClosestSurface more consistent with the behavior of ProjectedImageryTarget#AllSurfaces.
  2. On top of the base layer, a layer is painted in which all the projections in the line of sight are used. If, for a certain pixel, multiple projections are in the line of sight, they are painted on top of each other. You can use the opacity property of the style to blend these projections however you like.

Note that:

Since:
2026.1
  • Enum Constant Details

    • AllSurfaces

      public static final ProjectedImageryTarget AllSurfaces
      Project the image onto every surface intersected by the projection frustum.

      Surfaces that are further away from the projector are also projected, even when other surfaces are between them and the projector.

    • ClosestSurface

      public static final ProjectedImageryTarget ClosestSurface
      Project the image only onto the surface closest to the camera along each projected ray.

      Images are not projected on surfaces that are occluded by other surfaces (from the camera's point of view).

  • Method Details

    • values

      public static ProjectedImageryTarget[] values()
      Returns an array containing the constants of this enum class, in the order they are declared.
      Returns:
      an array containing the constants of this enum class, in the order they are declared
    • valueOf

      public static ProjectedImageryTarget valueOf(String name)
      Returns the enum constant of this class with the specified name. The string must match exactly an identifier used to declare an enum constant in this class. (Extraneous whitespace characters are not permitted.)
      Parameters:
      name - the name of the enum constant to be returned.
      Returns:
      the enum constant with the specified name
      Throws:
      IllegalArgumentException - if this enum class has no constant with the specified name
      NullPointerException - if the argument is null