Lightspeed views support a number of graphical effects which are applied globally, across all layers. These effects serve to improve the realism, sense of depth or scale, or simply the aesthetics of the images produced by the view. An example of such an effect is lighting, which greatly improves the user’s perception of the shape of 3D objects.
Using ALspGraphicsEffect and TLspGraphicsEffects
Graphics effects are represented by the abstract class
ALspGraphicsEffect. The design of graphic effects classes is conceptually similar to that of
ALspStyle: they describe the intended result, but do not contain any implementation logic. It is up
to the layers and painters to interpret the properties of the effects, and to apply the effects in terms of OpenGL rendering
as they see
fit. Because of this approach,
ALspGraphicsEffect itself is a fairly minimal class: it only contains an enable/disable
flag and support for property change listeners.
TLspGraphicsEffects serves as a central repository for all the effects that are currently applied to a given
ILspView. Each view creates its own instance of
TLspGraphicsEffects, and exposes the instance via its
TLspGraphicsEffects is essentially a collection of
When you add an effect to this collection, it is automatically applied to the view.
ILcdCollection<ALspGraphicsEffect> fx = getView().getServices().getGraphicsEffects(); fx.add( new TLspHeadLight( getView() ) );
The following sections describe the concrete implementations of
Lighting can add important visual cues about the size and shape of 3D objects in a view. Without it, objects are always drawn
at full brightness. When the lighting effect is enabled, the object sides that face the light are brighter, whereas the
sides that face away from the light are darkened. There are three concrete types of
ALspGraphicsEffect that enable lighting:
TLspDirectionalLightdescribes a light source coming from a specified direction. the light source is represented by a direction vector in world coordinates. A directional light can be used to simulate sunlight and its various directions in the course of a day.
TLspHeadLightis also a directional light, but its direction is linked to the orientation of the camera in the Lightspeed view. This can be a useful feature in many applications where lighting can improve a user’s perception of shape. In this case, lighting is not used to represent the time of day. The user does not want the whole Earth to have a bright side and a dark side.
TLspAmbientLightis a light of constant intensity that affects all objects equally. It is used to prevent that the unlit sides of objects turn totally black.
The Lightspeed view implementation currently only supports a single directional light, either
Adding sky and atmosphere effects
To enable the display of a sky or atmosphere in the
background of the view, add the class
TLspGraphicsEffects. Note that when you use
TLspViewBuilder, the atmosphere is added by default.
TLspFog enables a basic fog effect when it is used in a 3D view. Fog can be used to simulate weather conditions to some extent, and
can also improve the sense of scale in the view.
TLspFog computes the amount of fog in the view based on the altitude of the viewer above
the Earth. Above a certain altitude, fog is no longer applied.
The following properties are available to tweak the fog effect:
The fog color: use
The visibility distance: use
setVisibilityAtMinAltitude(). Objects located beyond this distance from the viewer are completely hidden in the fog.
A minimum and maximum altitude: use
setMaxAltitude(). These define the altitude range in which the visibility is varied. At or below the minimum altitude, the visibility is equal to the visibility distance, to be set with
setVisibilityAtMinAltitude(). As the camera approaches maximum altitude, visibility gradually increases. Beyond the maximum altitude, fog is no longer applied.