Main Content

Relief Mapping with Light Objects

This example shows how to create a light object to mimic the map produced in Colored Surface Shaded Relief, which uses shaded relief computations rather than light objects.

The meshlsrm and surflsrm functions simulate lighting by modifying the colormap with bands of light and dark. The map matrix is then converted to indices for the new "shaded" colormap based on calculated surface normals. Using light objects allows for a wide range of lighting effects. The toolbox manages light objects with the lightm function, which depends upon the MATLAB® light function. Lights are separate MATLAB graphic objects.

For more information, consult the reference pages for lightm, daspectm, material, lighting, and view, along with Lighting, Transparency, and Shading.

Illuminate Color 3-D Relief Maps with Light Objects

Add a light source to a surface colored data grid using lightm. First, load elevation data and a geographic cells reference object for the Korean peninsula. Display the data without lighting effects using meshm. Apply a colormap appropriate for elevation data using demcmap. Eliminate extra white space around the map using tightmap.

load korea5c
axesm('miller','MapLatLimit',[30 45],'MapLonLimit',[115 135])
meshm(korea5c,korea5cR,size(korea5c),korea5c)
demcmap(korea5c)
tightmap

Place a light source at the northwest corner of the grid, one degree high, using lightm. The lightm function is similar to the MATLAB® function light, but accepts latitude and longitude inputs instead of x, y, and z. Note that the figure becomes darker.

lightm(45,115,1)

Exaggerate the vertical dimension to make any relief viewable in perspective. Note that the figure becomes darker still.

daspectm('meters',50)

Set the ambient (direct), diffuse (skylight), and specular (highlight) surface reflectivity characteristics, respectively.

material([0.7 0.9 0.8])

By default, the lighting is flat (plane facets). Change the light to use Gouraud shading (interpolated normal vectors at facet corners).

lighting Gouraud

Remove the edges of the bounding box. Change the view by specifying an azimuth of -30º and an altitude of 30º.

ax = gca;
ax.Box = 'off';
view(-30,30)

If there is only one light in the current figure, you can remove it using clmo.

clmo(handlem('light'))