Re: Appearence of a digital elevation model

Hello Christian,

> Here is an elementary question about the way to represent a
> temperature field. I wish to obtain  a 3d picture of a 3d field
> ((lat, long, alt)-> temp) on a 3d grid,  with background a digital
> elevation model ((lat,long)->elev), on a 2d grid.  I have  almost got
> it.  I still have two problems. First,  sometimes the DEM appears as
> a DEM in grey in a realistic way, sometimes it appears as a
> polyhderic surface and I do'nt know how to  control  its appearence.

If you construct ScalarMaps:

  lat -> YAxis
  long -> XAxis
  elev -> ZAxis

then ((lat, long) -> elev) should be displayed as a
topography in shades of grey.  The polyhedric surface
appearance may be caused by the undersampling of surface
shape for curved texture maps.  You can control this by
either disabling texture mapping:

  GraphicsModeControl mode = display.getGraphicsModeControl();

or reducing the default undersampling factor of 10 to some
smaller value, such as 3:

  GraphicsModeControl mode = display.getGraphicsModeControl();

Please experiment with these and let me know if this
continues to be a problem for you.

> Second I wish to represent the temperature field by colouring the
> points of a 3d grid; is there a simple way to colour just the points
> with temperature in a given range ?

If you construct ScalarMaps:

  lat -> YAxis
  long -> XAxis
  alt -> ZAxis
  temp -> RGB

then ((lat, long, alt)-> temp) will displayed as a volume
rendering (if the domain Set is a Linear3DSet) or as discrete
points (if the domain Set is nor a Linear3DSet).  It sounds
like you are getting discrete points.  You can select points
in a temperature range by also constructing a ScalarMap:

  temp -> SelectRange

You can do a getControl() on this ScalarMap and call
setRange() on the returned RangeControl, or you can
construct a SelectRangeWidget from this ScalarMap and
add it to your GUI for interactive range selection.

If you would prefer volume rendering over discrete points,
you can resample your ((lat, long, alt)-> temp) field to
a Linear3DSet.  Note that if you call
mode.setTextureEnable(false) for your elevation data,
this will also disable volume rendering for your volume
data, in the same display.

Note that you may want to modify the MathType of your
elevation model to ((lat,long)->alt) so that it can
share the "alt -> ZAxis" ScalarMap with your volume.
That we you can be sure that altitudes are consistent
between the depictions of the elevation map and the
volume.  Alternatively, you can explicitly call setRange()
with identical ranges on the two ScalarMaps "alt ->ZAxis"
and "elev -> ZAxis".

Bill Hibbard, SSEC, 1225 W. Dayton St., Madison, WI  53706
hibbard@xxxxxxxxxxxxxxxxx  608-263-4427  fax: 608-263-6738