mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-04 18:41:51 +00:00
add math.noise2d
This commit is contained in:
parent
6910a7e029
commit
192dbd9b6c
1 changed files with 46 additions and 0 deletions
|
|
@ -71,3 +71,49 @@ function math.noise(x, octaves)
|
||||||
end
|
end
|
||||||
return value
|
return value
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function lerp(a, b, t)
|
||||||
|
return a + (b - a) * t
|
||||||
|
end
|
||||||
|
|
||||||
|
local function rand_2d(x, y)
|
||||||
|
return noise_rands[math.floor(x * 317 + y) % noise_period + 1]
|
||||||
|
end
|
||||||
|
|
||||||
|
local function sample_noise2d(x, y)
|
||||||
|
local x0 = math.floor(x)
|
||||||
|
local y0 = math.floor(y)
|
||||||
|
local x1 = x0 + 1
|
||||||
|
local y1 = y0 + 1
|
||||||
|
|
||||||
|
local tx = x - x0
|
||||||
|
local ty = y - y0
|
||||||
|
|
||||||
|
local sx = smoothstep(tx)
|
||||||
|
local sy = smoothstep(ty)
|
||||||
|
|
||||||
|
local c00 = rand_2d(x0, y0)
|
||||||
|
local c10 = rand_2d(x1, y0)
|
||||||
|
local c01 = rand_2d(x0, y1)
|
||||||
|
local c11 = rand_2d(x1, y1)
|
||||||
|
|
||||||
|
local bottom = lerp(c00, c10, sx)
|
||||||
|
local top = lerp(c01, c11, sx)
|
||||||
|
|
||||||
|
return lerp(bottom, top, sy)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function math.noise2d(x, y, octaves)
|
||||||
|
octaves = octaves or 1
|
||||||
|
local value = 0.0
|
||||||
|
local mul = 1.0
|
||||||
|
for i=1,octaves do
|
||||||
|
value = value * (1.0 - mul)
|
||||||
|
+ sample_noise2d(x + 37 * i, y + 73 * i) * mul
|
||||||
|
x = x * 2.0
|
||||||
|
y = y * 2.0
|
||||||
|
mul = mul * 0.5
|
||||||
|
end
|
||||||
|
return value
|
||||||
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue