Difference between revisions of "FractalNoise"

(Created page with "Generates a fractal noise using LOVE's noise functions <source lang="lua"> -- returns a fractal noise value in the range [-1.0, 1.0] function genFractalNoise2(x, y, iter, factor...")
 
(minor edit to the code, added comments.)
Line 2: Line 2:
  
 
<source lang="lua">
 
<source lang="lua">
 +
-- x, y, z are the positions to sample
 +
-- iter is how many iterations (octaves) of the noise (default: 1)
 +
-- amp is the amplitude factor (default: 0.5)
 +
-- freq is the frequency factor (default: 2)
 +
 
-- returns a fractal noise value in the range [-1.0, 1.0]
 
-- returns a fractal noise value in the range [-1.0, 1.0]
function genFractalNoise2(x, y, iter, factor, f)
+
function genFractalNoise2(x, y, iter, amp, freq)
 
val = love.math.noise(x, y)*2-1
 
val = love.math.noise(x, y)*2-1
f = f or 2
+
freq = freq or 2
 
iter = iter or 1
 
iter = iter or 1
factor = factor or 0.5
+
amp = amp or 0.5
 
local n = 0
 
local n = 0
 
while n < iter-1 do
 
while n < iter-1 do
val = val + (love.math.noise(x*n^f, y*n^f)*2-1)*factor^n
+
val = val + (love.math.noise(x*freq, y*freq)*2-1)*amp
 +
freq = freq * freq
 +
amp = amp * amp
 
n = n + 1
 
n = n + 1
 
end
 
end
Line 17: Line 24:
  
 
-- returns a fractal noise value in the range [-1.0, 1.0]
 
-- returns a fractal noise value in the range [-1.0, 1.0]
function genFractalNoise3(x, y, z, iter, factor, f)
+
function genFractalNoise3(x, y, z, iter, amp, freq)
val = love.math.noise(x, y, z)*2-1
+
local val = love.math.noise(x, y, z)*2-1
f = f or 2
+
freq = freq or 2
 +
iter = iter or 1
 +
amp = amp or 0.5
 
local n = 0
 
local n = 0
 
while n < iter-1 do
 
while n < iter-1 do
val = val + (love.math.noise(x*n^f, y*n^f, z*n^f)*2-1)*factor^n
+
val = val + (love.math.noise(x*freq, y*freq, z*freq)*2-1)*amp
 +
freq = freq * freq
 +
amp = amp * amp
 
n = n + 1
 
n = n + 1
 
end
 
end

Revision as of 07:50, 25 March 2014

Generates a fractal noise using LOVE's noise functions

-- x, y, z are the positions to sample
-- iter is how many iterations (octaves) of the noise (default: 1)
-- amp is the amplitude factor (default: 0.5)
-- freq is the frequency factor (default: 2)

-- returns a fractal noise value in the range [-1.0, 1.0]
function genFractalNoise2(x, y, iter, amp, freq)
	val = love.math.noise(x, y)*2-1
	freq = freq or 2
	iter = iter or 1
	amp = amp or 0.5
	local n = 0
	while n < iter-1 do
		val = val + (love.math.noise(x*freq, y*freq)*2-1)*amp
		freq = freq * freq
		amp = amp * amp
		n = n + 1
	end
	return math.max(math.min(val, 1.0), -1.0)
end

-- returns a fractal noise value in the range [-1.0, 1.0]
function genFractalNoise3(x, y, z, iter, amp, freq)
	local val = love.math.noise(x, y, z)*2-1
	freq = freq or 2
	iter = iter or 1
	amp = amp or 0.5
	local n = 0
	while n < iter-1 do
		val = val + (love.math.noise(x*freq, y*freq, z*freq)*2-1)*amp
		freq = freq * freq
		amp = amp * amp
		n = n + 1
	end
	return math.max(math.min(val, 1.0), -1.0)
end

Contributors