com.jmex.terrain.util
Class AbstractHeightMap

java.lang.Object
  extended by com.jmex.terrain.util.AbstractHeightMap
Direct Known Subclasses:
CombinerHeightMap, FaultFractalHeightMap, FluidSimHeightMap, HillHeightMap, ImageBasedHeightMap, MidPointHeightMap, ParticleDepositionHeightMap, RawHeightMap

public abstract class AbstractHeightMap
extends java.lang.Object

AbstractHeightMap provides a base implementation of height data for terrain rendering. The loading of the data is dependent on the subclass. The abstract implementation provides a means to retrieve the height data and to save it. It is the general contract that any subclass provide a means of editing required attributes and calling load again to recreate a heightfield with these new parameters.

Version:
$Id: AbstractHeightMap.java 4133 2009-03-19 20:40:11Z blaine.dev $
Author:
Mark Powell

Field Summary
protected  float filter
          The filter is used to erode the terrain.
protected  float[] heightData
          Height data information.
protected  float heightScale
          Allows scaling the Y height of the map.
static float NORMALIZE_RANGE
          The range used to normalize terrain
protected  int size
          The size of the height map's width.
 
Constructor Summary
AbstractHeightMap()
           
 
Method Summary
 void erodeTerrain(float[][] tempBuffer)
          erodeTerrain is a convenience method that applies the FIR filter to a given height map.
 float[] getHeightMap()
          getHeightMap returns the entire grid of height data.
 float getInterpolatedHeight(float x, float z)
          getInterpolatedHeight returns the height of a point that does not fall directly on the height posts.
 float getScaledHeightAtPoint(int x, int z)
          getScaledHeightAtPoint returns the scaled value at the point provided.
 int getSize()
          getSize returns the size of one side the height map.
 float getTrueHeightAtPoint(int x, int z)
          getTrueHeightAtPoint returns the non-scaled value at the point provided.
abstract  boolean load()
          load populates the height map data.
 void normalizeTerrain(float[][] tempBuffer)
          normalizeTerrain takes the current terrain data and converts it to values between 0 and 255.
 boolean save(java.lang.String filename)
          save will save the heightmap data into a new RAW file denoted by the supplied filename.
 void setHeightAtPoint(float height, int x, int z)
          setHeightAtPoint sets the height value for a given coordinate.
 void setHeightScale(float scale)
          setHeightScale sets the scale of the height values.
 void setMagnificationFilter(float filter)
          setFilter sets the erosion value for the filter.
 void setSize(int size)
          setSize sets the size of the terrain where the area is size x size.
 void unloadHeightMap()
          unloadHeightMap clears the data of the height map.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

heightData

protected float[] heightData
Height data information.


size

protected int size
The size of the height map's width.


heightScale

protected float heightScale
Allows scaling the Y height of the map.


filter

protected float filter
The filter is used to erode the terrain.


NORMALIZE_RANGE

public static float NORMALIZE_RANGE
The range used to normalize terrain

Constructor Detail

AbstractHeightMap

public AbstractHeightMap()
Method Detail

unloadHeightMap

public void unloadHeightMap()
unloadHeightMap clears the data of the height map. This insures it is ready for reloading.


setHeightScale

public void setHeightScale(float scale)
setHeightScale sets the scale of the height values. Typically, the height is a little too extreme and should be scaled to a smaller value (i.e. 0.25), to produce cleaner slopes.

Parameters:
scale - the scale to multiply height values by.

setHeightAtPoint

public void setHeightAtPoint(float height,
                             int x,
                             int z)
setHeightAtPoint sets the height value for a given coordinate. It is recommended that the height value be within the 0 - 255 range.

Parameters:
height - the new height for the coordinate.
x - the x (east/west) coordinate.
z - the z (north/south) coordinate.

setSize

public void setSize(int size)
setSize sets the size of the terrain where the area is size x size.

Parameters:
size - the new size of the terrain.
Throws:
JmeException - if the size is less than or equal to zero.

setMagnificationFilter

public void setMagnificationFilter(float filter)
setFilter sets the erosion value for the filter. This value must be between 0 and 1, where 0.2 - 0.4 produces arguably the best results.

Parameters:
filter - the erosion value.
Throws:
JmeException - if filter is less than 0 or greater than 1.

getTrueHeightAtPoint

public float getTrueHeightAtPoint(int x,
                                  int z)
getTrueHeightAtPoint returns the non-scaled value at the point provided.

Parameters:
x - the x (east/west) coordinate.
z - the z (north/south) coordinate.
Returns:
the value at (x,z).

getScaledHeightAtPoint

public float getScaledHeightAtPoint(int x,
                                    int z)
getScaledHeightAtPoint returns the scaled value at the point provided.

Parameters:
x - the x (east/west) coordinate.
z - the z (north/south) coordinate.
Returns:
the scaled value at (x, z).

getInterpolatedHeight

public float getInterpolatedHeight(float x,
                                   float z)
getInterpolatedHeight returns the height of a point that does not fall directly on the height posts.

Parameters:
x - the x coordinate of the point.
z - the y coordinate of the point.
Returns:
the interpolated height at this point.

getHeightMap

public float[] getHeightMap()
getHeightMap returns the entire grid of height data.

Returns:
the grid of height data.

getSize

public int getSize()
getSize returns the size of one side the height map. Where the area of the height map is size x size.

Returns:
the size of a single side.

save

public boolean save(java.lang.String filename)
save will save the heightmap data into a new RAW file denoted by the supplied filename.

Parameters:
filename - the file name to save the current data as.
Returns:
true if the save was successful, false otherwise.
Throws:
JmeException - if filename is null.

normalizeTerrain

public void normalizeTerrain(float[][] tempBuffer)
normalizeTerrain takes the current terrain data and converts it to values between 0 and 255.

Parameters:
tempBuffer - the terrain to normalize.

erodeTerrain

public void erodeTerrain(float[][] tempBuffer)
erodeTerrain is a convenience method that applies the FIR filter to a given height map. This simulates water errosion.

Parameters:
tempBuffer - the terrain to filter.

load

public abstract boolean load()
load populates the height map data. This is dependent on the subclass's implementation.

Returns:
true if the load was successful, false otherwise.