Difference between revisions of "love.math.noise"

(Remove dead link)
m (Examples: Some polish.)
 
(4 intermediate revisions by 2 users not shown)
Line 56: Line 56:
 
== Examples ==
 
== Examples ==
 
Fills a two-dimensional grid with simplex noise each time a key is pressed.
 
Fills a two-dimensional grid with simplex noise each time a key is pressed.
 +
 
<source lang="lua">
 
<source lang="lua">
 
local grid = {}
 
local grid = {}
  
function love.draw()
+
local function generateNoiseGrid()
    for x = 1, #grid do
+
-- Fill each tile in our grid with noise.
        for y = 1, #grid[x] do
+
local baseX = 10000 * love.math.random()
            local f = 255 * grid[x][y]
+
local baseY = 10000 * love.math.random()
            love.graphics.setColor( f, f, f, 255 )
+
for y = 1, 60 do
            love.graphics.rectangle( 'fill', x * 8, y * 8, 7, 7 )
+
grid[y] = {}
            love.graphics.setColor( 255, 255, 255, 255 )
+
for x = 1, 60 do
        end
+
grid[y][x] = love.math.noise(baseX+.1*x, baseY+.2*y)
    end
+
end
 +
end
 
end
 
end
  
-- Fill each pixel in our grid with simplex noise.
+
function love.load()
local function noise()
+
generateNoiseGrid()
    for x = 1, 60 do
+
end
        for y = 1, 60 do
+
function love.keypressed()
            grid[x] = grid[x] or {}
+
generateNoiseGrid()
            grid[x][y] = love.math.noise( x + love.math.random(), y + love.math.random() )
 
        end
 
    end
 
 
end
 
end
  
function love.keypressed()
+
function love.draw()
    noise()
+
local tileSize = 8
 +
for y = 1, #grid do
 +
for x = 1, #grid[y] do
 +
love.graphics.setColor(1, 1, 1, grid[y][x])
 +
love.graphics.rectangle("fill", x*tileSize, y*tileSize, tileSize-1, tileSize-1)
 +
end
 +
end
 
end
 
end
 
</source>
 
</source>

Latest revision as of 19:20, 29 September 2022

Available since LÖVE 0.9.0
This function is not supported in earlier versions.

Generates a Simplex or Perlin noise value in 1-4 dimensions. The return value will always be the same, given the same arguments.

Simplex noise is closely related to Perlin noise. It is widely used for procedural content generation.

There are many webpages which discuss Perlin and Simplex noise in detail.

O.png The return value might be constant if only integer arguments are used. Avoid solely passing in integers, to get varying return values.  


Function

Generates Simplex noise from 1 dimension.

Synopsis

value = love.math.noise( x )

Arguments

number x
The number used to generate the noise value.

Returns

number value
The noise value in the range of [0, 1].

Function

Generates Simplex noise from 2 dimensions.

Synopsis

value = love.math.noise( x, y )

Arguments

number x
The first value of the 2-dimensional vector used to generate the noise value.
number y
The second value of the 2-dimensional vector used to generate the noise value.

Returns

number value
The noise value in the range of [0, 1].

Function

Generates Perlin noise (Simplex noise in version 0.9.2 and older) from 3 dimensions.

Synopsis

value = love.math.noise( x, y, z )

Arguments

number x
The first value of the 3-dimensional vector used to generate the noise value.
number y
The second value of the 3-dimensional vector used to generate the noise value.
number z
The third value of the 3-dimensional vector used to generate the noise value.

Returns

number value
The noise value in the range of [0, 1].

Function

Generates Perlin noise (Simplex noise in version 0.9.2 and older) from 4 dimensions.

Synopsis

value = love.math.noise( x, y, z, w )

Arguments

number x
The first value of the 4-dimensional vector used to generate the noise value.
number y
The second value of the 4-dimensional vector used to generate the noise value.
number z
The third value of the 4-dimensional vector used to generate the noise value.
number w
The fourth value of the 4-dimensional vector used to generate the noise value.

Returns

number value
The noise value in the range of [0, 1].

Examples

Fills a two-dimensional grid with simplex noise each time a key is pressed.

local grid = {}

local function generateNoiseGrid()
	-- Fill each tile in our grid with noise.
	local baseX = 10000 * love.math.random()
	local baseY = 10000 * love.math.random()
	for y = 1, 60 do
		grid[y] = {}
		for x = 1, 60 do
			grid[y][x] = love.math.noise(baseX+.1*x, baseY+.2*y)
		end
	end
end

function love.load()
	generateNoiseGrid()
end
function love.keypressed()
	generateNoiseGrid()
end

function love.draw()
	local tileSize = 8
	for y = 1, #grid do
		for x = 1, #grid[y] do
			love.graphics.setColor(1, 1, 1, grid[y][x])
			love.graphics.rectangle("fill", x*tileSize, y*tileSize, tileSize-1, tileSize-1)
		end
	end
end

See Also

Other Languages