mirror of
https://github.com/minetest/minetest.git
synced 2025-06-30 07:00:23 +02:00
SAPI/Noise: Add PerlinNoiseMap:getMapSlice() function
This adds the ability to grab 'slices' of noise calculated by PerlinNoiseMap. Retrieving smaller slices of noise from the computation result as needed optimizes memory usage while maintaining a reasonable amount of CPU overhead.
This commit is contained in:
@ -2640,16 +2640,30 @@ Format of `size` is `{x=dimx, y=dimy, z=dimz}`. The `z` conponent is ommitted
|
||||
for 2D noise, and it must be must be larger than 1 for 3D noise (otherwise
|
||||
`nil` is returned).
|
||||
|
||||
For each of the functions with an optional `buffer` parameter: If `buffer` is not
|
||||
nil, this table will be used to store the result instead of creating a new table.
|
||||
|
||||
|
||||
#### Methods
|
||||
* `get2dMap(pos)`: returns a `<size.x>` times `<size.y>` 2D array of 2D noise
|
||||
with values starting at `pos={x=,y=}`
|
||||
* `get3dMap(pos)`: returns a `<size.x>` times `<size.y>` times `<size.z>` 3D array
|
||||
of 3D noise with values starting at `pos={x=,y=,z=}`
|
||||
* `get2dMap_flat(pos)`: returns a flat `<size.x * size.y>` element array of 2D noise
|
||||
* `get2dMap_flat(pos, buffer)`: returns a flat `<size.x * size.y>` element array of 2D noise
|
||||
with values starting at `pos={x=,y=}`
|
||||
* if the param `buffer` is present, this table will be used to store the result instead
|
||||
* `get3dMap_flat(pos)`: Same as `get2dMap_flat`, but 3D noise
|
||||
* if the param `buffer` is present, this table will be used to store the result instead
|
||||
* `get3dMap_flat(pos, buffer)`: Same as `get2dMap_flat`, but 3D noise
|
||||
* `calc2dMap(pos)`: Calculates the 2d noise map starting at `pos`. The result is stored internally.
|
||||
* `calc3dMap(pos)`: Calculates the 3d noise map starting at `pos`. The result is stored internally.
|
||||
* `getMapSlice(slice_offset, slice_size, buffer)`: In the form of an array, returns a slice of the
|
||||
most recently computed noise results. The result slice begins at coordinates `slice_offset` and
|
||||
takes a chunk of `slice_size`.
|
||||
E.g. to grab a 2-slice high horizontal 2d plane of noise starting at buffer offset y = 20:
|
||||
`noisevals = noise:getMapSlice({y=20}, {y=2})`
|
||||
It is important to note that `slice_offset` offset coordinates begin at 1, and are relative to
|
||||
the starting position of the most recently calculated noise.
|
||||
To grab a single vertical column of noise starting at map coordinates x = 1023, y=1000, z = 1000:
|
||||
`noise:calc3dMap({x=1000, y=1000, z=1000})`
|
||||
`noisevals = noise:getMapSlice({x=24, z=1}, {x=1, z=1})`
|
||||
|
||||
### `VoxelManip`
|
||||
An interface to the `MapVoxelManipulator` for Lua.
|
||||
|
Reference in New Issue
Block a user