Package com.jme3.terrain.heightmap
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
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
Modifier and TypeFieldDescriptionprotected 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 terrainprotected int
The size of the height map's width. -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
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()
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 andvalue
.boolean
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.
-
Field Details
-
heightData
protected float[] heightDataHeight data information. -
size
protected int sizeThe size of the height map's width. -
heightScale
protected float heightScaleAllows scaling the Y height of the map. -
filter
protected float filterThe filter is used to erode the terrain. -
NORMALIZE_RANGE
public static float NORMALIZE_RANGEThe 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 interfaceHeightMap
-
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 interfaceHeightMap
- 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 interfaceHeightMap
- Parameters:
height
- the new height for the coordinate.x
- the x (east/west) coordinate.z
- the z (north/south) coordinate.
-
setSize
setSize
sets the size of the terrain where the area is size x size. -
setMagnificationFilter
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 interfaceHeightMap
- 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 interfaceHeightMap
- 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 interfaceHeightMap
- 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 interfaceHeightMap
- 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 interfaceHeightMap
- 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 interfaceHeightMap
- 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. -
save
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 andvalue
.- 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 bynp
. 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 bynp
. 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.
-