jme.locale.external.data
Class AbstractHeightMap

java.lang.Object
  extended byjme.locale.external.data.AbstractHeightMap
Direct Known Subclasses:
CombinerHeightMap, FaultFractalHeightMap, 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:
1
Author:
Mark Powell

Field Summary
protected  float filter
           
protected  int[][] heightData
           
protected  float heightScale
           
protected  int size
           
 
Constructor Summary
AbstractHeightMap()
           
 
Method Summary
protected  void erodeTerrain(float[][] tempBuffer)
          erodeTerrain is a convenience method that applies the FIR filter to a given height map.
 int[][] 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.
 int 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 setFilter(float filter)
          setFilter sets the erosion value for the filter.
 void setHeightAtPoint(int 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 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 int[][] heightData

size

protected int size

heightScale

protected float heightScale

filter

protected float filter
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(int 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:
MonkeyRuntimeException - if the size is less than or equal to zero.

setFilter

public void setFilter(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:
MonkeyRuntimeException - if filter is less than 0 or greater than 1.

getTrueHeightAtPoint

public int 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 int[][] 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:
MonkeyRuntimeException - 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

protected 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.