mirror of
https://github.com/sbrl/Minetest-WorldEditAdditions.git
synced 2024-11-22 15:33:00 +00:00
Noise: add perlinmt algorithm & set as default
This commit is contained in:
parent
7de09e92b3
commit
6f00394d3d
5 changed files with 41 additions and 3 deletions
|
@ -31,6 +31,7 @@ read_globals = {
|
||||||
"it",
|
"it",
|
||||||
"describe",
|
"describe",
|
||||||
"bonemeal",
|
"bonemeal",
|
||||||
"dofile"
|
"dofile",
|
||||||
|
"PerlinNoise"
|
||||||
}
|
}
|
||||||
std = "max"
|
std = "max"
|
||||||
|
|
|
@ -2,8 +2,9 @@ local wea = worldeditadditions
|
||||||
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
available = { "perlin", "sin", "white", "red", "infrared" },
|
available = { "perlin", "perlinmt", "sin", "white", "red", "infrared" },
|
||||||
Perlin = dofile(wea.modpath.."/lib/noise/engines/perlin.lua"),
|
Perlin = dofile(wea.modpath.."/lib/noise/engines/perlin.lua"),
|
||||||
|
PerlinMT = dofile(wea.modpath.."/lib/noise/engines/perlinmt.lua"),
|
||||||
Sin = dofile(wea.modpath.."/lib/noise/engines/sin.lua"),
|
Sin = dofile(wea.modpath.."/lib/noise/engines/sin.lua"),
|
||||||
White = dofile(wea.modpath.."/lib/noise/engines/white.lua"),
|
White = dofile(wea.modpath.."/lib/noise/engines/white.lua"),
|
||||||
Red = dofile(wea.modpath.."/lib/noise/engines/red.lua"),
|
Red = dofile(wea.modpath.."/lib/noise/engines/red.lua"),
|
||||||
|
|
32
worldeditadditions/lib/noise/engines/perlinmt.lua
Normal file
32
worldeditadditions/lib/noise/engines/perlinmt.lua
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
local wea = worldeditadditions
|
||||||
|
|
||||||
|
|
||||||
|
local PerlinMT = {}
|
||||||
|
PerlinMT.__index = PerlinMT
|
||||||
|
|
||||||
|
|
||||||
|
function PerlinMT.new(seed, params)
|
||||||
|
if not seed then seed = 0 end
|
||||||
|
local result = {
|
||||||
|
-- Provided by Minetest
|
||||||
|
engine = PerlinNoise({
|
||||||
|
offset = 0,
|
||||||
|
scale = 1,
|
||||||
|
spread = {x = 10, y = 10, z = 10},
|
||||||
|
seed = seed,
|
||||||
|
octaves = 1,
|
||||||
|
persistence = 0.63,
|
||||||
|
lacunarity = 2.0,
|
||||||
|
flags = "defaults,absvalue",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
setmetatable(result, PerlinMT)
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
|
||||||
|
function PerlinMT:noise( x, y, z )
|
||||||
|
local value = self.engine:get_3d(wea.Vector3.new(x, y, z))
|
||||||
|
return value
|
||||||
|
end
|
||||||
|
|
||||||
|
return PerlinMT
|
|
@ -11,12 +11,16 @@ local wea = worldeditadditions
|
||||||
-- @param size Vector An x/y vector representing the size of the noise area to generate.
|
-- @param size Vector An x/y vector representing the size of the noise area to generate.
|
||||||
-- @param params table|table<table> A table of noise params to use to generate the noise. Values that aren't specified are filled in automatically. If a table of tables is specified, it is interpreted as multiple octaves of noise to apply in sequence.
|
-- @param params table|table<table> A table of noise params to use to generate the noise. Values that aren't specified are filled in automatically. If a table of tables is specified, it is interpreted as multiple octaves of noise to apply in sequence.
|
||||||
function worldeditadditions.noise.make_2d(size, start_pos, params)
|
function worldeditadditions.noise.make_2d(size, start_pos, params)
|
||||||
|
params = worldeditadditions.noise.params_apply_default(params)
|
||||||
|
|
||||||
local result = {}
|
local result = {}
|
||||||
|
|
||||||
for layer_i, layer in ipairs(params) do
|
for layer_i, layer in ipairs(params) do
|
||||||
local generator
|
local generator
|
||||||
if layer.algorithm == "perlin" then
|
if layer.algorithm == "perlin" then
|
||||||
generator = wea.noise.engines.Perlin.new()
|
generator = wea.noise.engines.Perlin.new()
|
||||||
|
elseif layer.algorithm == "perlinmt" then
|
||||||
|
generator = wea.noise.engines.PerlinMT.new()
|
||||||
elseif layer.algorithm == "sin" then
|
elseif layer.algorithm == "sin" then
|
||||||
generator = wea.noise.engines.Sin.new()
|
generator = wea.noise.engines.Sin.new()
|
||||||
elseif layer.algorithm == "white" then
|
elseif layer.algorithm == "white" then
|
||||||
|
|
|
@ -13,7 +13,7 @@ function worldeditadditions.noise.params_apply_default(params)
|
||||||
-- - A string in the form of digits followed, then the noise will is remapped from the range 0 - 1 to the range -1 - +1 and multiplied by this number / 2, and then for each pixel in the heightmap the corresponding noise value will be added to it.
|
-- - A string in the form of digits followed, then the noise will is remapped from the range 0 - 1 to the range -1 - +1 and multiplied by this number / 2, and then for each pixel in the heightmap the corresponding noise value will be added to it.
|
||||||
apply = 5,
|
apply = 5,
|
||||||
-- The backend noise algorithm to use
|
-- The backend noise algorithm to use
|
||||||
algorithm = "perlin",
|
algorithm = "perlinmt",
|
||||||
-- Zooms in and out
|
-- Zooms in and out
|
||||||
scale = wea.Vector3.new(1, 1, 1),
|
scale = wea.Vector3.new(1, 1, 1),
|
||||||
-- Offset the generated noise by this vector.
|
-- Offset the generated noise by this vector.
|
||||||
|
|
Loading…
Reference in a new issue