Class AbstractHeightMap

java.lang.Object
com.jme3.terrain.heightmap.AbstractHeightMap
All Implemented Interfaces:
HeightMap
Direct Known Subclasses:
CombinerHeightMap, FaultHeightMap, FluidSimHeightMap, FractalTileLoader.FloatBufferHeightMap, HillHeightMap, ImageBasedHeightMap, MidpointDisplacementHeightMap, ParticleDepositionHeightMap, RawHeightMap

public abstract class AbstractHeightMap extends Object implements HeightMap
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.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected float
    The filter is used to erode the terrain.
    protected float[]
    Height data information.
    protected float
    Allows scaling the Y height of the map.
    static float
    The range used to normalize terrain
    protected int
    The size of the height map's width.
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    erodeTerrain is a convenience method that applies the FIR filter to a given height map.
    float[]
    Find the minimum and maximum height values.
    void
    flatten(byte flattening)
    Flattens out the valleys.
    float[]
    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.
    float[]
    Build a new array of height data with the scaled values.
    int
    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.
    void
    normalizeTerrain(float value)
    normalizeTerrain takes the current terrain data and converts it to values between 0 and value.
    boolean
    save(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
    smooth(float np)
    Smooth the terrain.
    void
    smooth(float np, int radius)
    Smooth the terrain.
    void
    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

    Methods inherited from interface com.jme3.terrain.heightmap.HeightMap

    load
  • Field Details

    • 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 Details

    • AbstractHeightMap

      public AbstractHeightMap()
  • Method Details

    • unloadHeightMap

      public void unloadHeightMap()
      unloadHeightMap clears the data of the height map. This insures it is ready for reloading.
      Specified by:
      unloadHeightMap in interface HeightMap
    • 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.
      Specified by:
      setHeightScale in interface HeightMap
      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.
      Specified by:
      setHeightAtPoint in interface HeightMap
      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) throws Exception
      setSize sets the size of the terrain where the area is size x size.
      Specified by:
      setSize in interface HeightMap
      Parameters:
      size - the new size of the terrain.
      Throws:
      Exception
      Exception - if the size is less than or equal to zero.
    • setMagnificationFilter

      public void setMagnificationFilter(float filter) throws Exception
      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.
      Specified by:
      setMagnificationFilter in interface HeightMap
      Parameters:
      filter - the erosion value.
      Throws:
      Exception - 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.
      Specified by:
      getTrueHeightAtPoint in interface HeightMap
      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.
      Specified by:
      getScaledHeightAtPoint in interface HeightMap
      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.
      Specified by:
      getInterpolatedHeight in interface HeightMap
      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.
      Specified by:
      getHeightMap in interface HeightMap
      Returns:
      the grid of height data.
    • getScaledHeightMap

      public float[] getScaledHeightMap()
      Build a new array of height data with the scaled values.
      Specified by:
      getScaledHeightMap in interface HeightMap
      Returns:
      a new array
    • 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.
      Specified by:
      getSize in interface HeightMap
      Returns:
      the size of a single side.
    • save

      public boolean save(String filename) throws Exception
      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:
      Exception - if filename is null.
    • normalizeTerrain

      public void normalizeTerrain(float value)
      normalizeTerrain takes the current terrain data and converts it to values between 0 and value.
      Parameters:
      value - the value to normalize to.
    • findMinMaxHeights

      public float[] findMinMaxHeights()
      Find the minimum and maximum height values.
      Returns:
      a float array with two value: min height, max height
    • erodeTerrain

      public void erodeTerrain()
      erodeTerrain is a convenience method that applies the FIR filter to a given height map. This simulates water erosion.
    • flatten

      public void flatten(byte flattening)
      Flattens out the valleys. The flatten algorithm makes the valleys more prominent while keeping the hills mostly intact. This effect is based on what happens when values below one are squared. The terrain will be normalized between 0 and 1 for this function to work.
      Parameters:
      flattening - the power of flattening applied, 1 means none
    • smooth

      public void smooth(float np)
      Smooth the terrain. For each node, its 8 neighbors' heights are averaged and will influence node's new height to the extent specified by np. You must first load() the heightmap data before this will have any effect.
      Parameters:
      np - To what extent neighbors influence the new height: Value of 0 will ignore neighbors (no smoothing). Value of 1 will ignore the node old height.
    • smooth

      public void smooth(float np, int radius)
      Smooth the terrain. For each node, its X (determined by radius) neighbors' heights are averaged and will influence node's new height to the extent specified by np. You must first load() the heightmap data before this will have any effect.
      Parameters:
      np - To what extent neighbors influence the new height: Value of 0 will ignore neighbors (no smoothing). Value of 1 will ignore the node old height.