README
ds-heightmap
Using diamond-square algorithm to generate heightmaps which stored in a 2D-array.
Demo
You can visit the online demo to try it out.
Install
npm install --save ds-heightmap
Usage
const ds = require('ds-heightmap');
ds.init(12, {
corner: [1, 1, 5, 5], // determine the heights of four corners
offset: -0.5, // effect the overall height of the map
range: 9, // all the height values in the map will be within -range to range
rough: 0.8 // effect the terrain variability (roughness)
}); // pass factors
ds.run(); // generate a new heightmap base on the factors above
const data = ds.out(); // return a 2D-array of numbers
// Or call ds.gen() to do ds.run() and ds.out() together.
Or in another way:
const ds = require('ds-heightmap').ds;
const data = ds(12, {
corner: [1, 1, 5, 5],
offset: -0.5,
range: 9,
rough: 0.8
});
Using ES6:
import heightmap, { ds } from 'ds-heightmap';
heightmap.init(9);
// or
const data = ds(7);
Or in Html:
<script src="/path/to/ds-heightmap.min.js"></script>
Render the map
Once you get the map data, you can render it into an image using an external image processing library. Here is an example with jimp:
const Jimp = require('jimp');
new Jimp(size, size, (err, image) => {
if (err) throw err;
data.forEach((d, x) => {
d.forEach((v, y) => {
image.setPixelColor(convertValueToColor(v), x, y);
});
});
image.write('map.png', (err) => {
if (err) throw err;
});
});
API
init (power, option = {})
Init the library. Where power
effects the size of the map (If power
equals n
, a map of 2n * 2n will be produced). For option
, see below.
run ()
Manually call this function to do the diamond-square algorithm.
array
out () => Return the map data.
array
ds (power, option = {}) => Run init
, run
, out
all together.
array
gen () => Run run
, out
all together.
options
Option | Description | Type | Default |
---|---|---|---|
corner | Determine the heights of four corners. They are initial values in diamond-square algorithm. Can be an array of four numbers or only one number which means all corners have the same height. | Array, Number | [1, 1, 1, 1] |
offset | Designed to effect the overall height of the map. Ranged from -0.9 to 0.9 . |
Number | -0.2 |
range | All the height values in the map will be within -range to range . The min value is 1 . |
Number | 7 |
rough | Designed to effect the terrain variability (roughness). Ranged from 0.1 to 0.9 . |
Number | 0.8 |