}\r
\r
/**\r
+ * Find the minimum and maximum height values.\r
+ * @return a float array with two value: min height, max height\r
+ */\r
+ public float[] findMinMaxHeights() {\r
+ float[] minmax = new float[2];\r
+\r
+ float currentMin, currentMax;\r
+ currentMin = heightData[0];\r
+ currentMax = heightData[0];\r
+\r
+ for (int i = 0; i < heightData.length; i++) {\r
+ if (heightData[i] > currentMax) {\r
+ currentMax = heightData[i];\r
+ } else if (heightData[i] < currentMin) {\r
+ currentMin = heightData[i];\r
+ }\r
+ }\r
+ minmax[0] = currentMin;\r
+ minmax[1] = currentMax;\r
+ return minmax;\r
+ }\r
+\r
+ /**\r
* <code>erodeTerrain</code> is a convenience method that applies the FIR\r
* filter to a given height map. This simulates water errosion.\r
*\r
if (flattening <= 1) {\r
return;\r
}\r
+\r
+ float[] minmax = findMinMaxHeights();\r
+\r
normalizeTerrain(1f);\r
+\r
for (int x = 0; x < size; x++) {\r
for (int y = 0; y < size; y++) {\r
float flat = 1.0f;\r
heightData[x + y * size] = flat;\r
}\r
}\r
+\r
+ // re-normalize back to its oraginal height range\r
+ float height = minmax[1] - minmax[0];\r
+ normalizeTerrain(height);\r
}\r
\r
/**\r