Difference between revisions of "PerlinNoiseMap"

From Minetest Developer Wiki
Jump to navigation Jump to search
(Created page with "A fast, bulk perlin noise generator Can be created via * <source enclose="none">PerlinNoiseMap(noiseparams, size)</source> * <source enclose="none">minetest.get_perlin_map(noi...")
 
(Add examples + noiseparams)
Line 17: Line 17:
 
| Same as get2dMap_flat, but 3d noise
 
| Same as get2dMap_flat, but 3d noise
 
|}
 
|}
 +
== Noise Params ==
 +
Here's an example of the noiseparams:
 +
<source>local testparam = {
 +
  offset = 0,
 +
  scale = 1,
 +
  spread = {x=2048, y=2048, z=2048},
 +
  seed = 1337,
 +
  octaves = 6,
 +
  persist = 0.6
 +
}</source>
 +
* spread: defines how fast the (ex.) terrain high changes (frequency)
 +
* seed: every seed generates an other perlin map
 +
* octaves: higher value, higher details
 +
 +
== Examples ==
 +
<source>minetest.register_on_generated(function(minp, maxp, seed)
 +
  local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
 +
  local area = VoxelArea:new{MinEdge=emin, MaxEdge=emax}
 +
  local data = vm:get_data()
 +
 
 +
  --get side length of the current mapgen block
 +
  local side_length = maxp.x - minp.x + 1
 +
  local map_lengths_xyz = {x=side_length, y=side_length, z=side_length}
 +
  local perlin_map = minetest.get_perlin_map(testparam, map_lengths_xyz):get2dMap_flat(minp)
 +
 +
  --loop
 +
  local perlin_index = 1
 +
  for z = minp.z, maxp.z do
 +
      for y = minp.y, maxp.y do
 +
        local vi = area:index(minp.x, y, z)
 +
        for x = minp.x, maxp.x do
 +
            print("Some spam value: "..tostring(perlin_map[vi])
 +
            --more efficient coding - x++
 +
            perlin_index = perlin_index + 1
 +
            vi = vi + 1
 +
        end
 +
        --go back, one side_length
 +
        perlin_index = perlin_index - side_length
 +
      end
 +
      --go forward, one side_length
 +
      perlin_index = perlin_index + side_length
 +
  end
 +
end)</source>
  
{{MissingExample}}
 
 
{{Incomplete}}
 
{{Incomplete}}
 
[[Category:Objects]]
 
[[Category:Objects]]

Revision as of 11:56, 4 June 2014

A fast, bulk perlin noise generator Can be created via

  • PerlinNoiseMap(noiseparams, size)
  • minetest.get_perlin_map(noiseparams, size)

Methods

get2dMap(pos) <size.x>X<size.y> 2d array of 2d noise values starting at pos={x=,y=}
get3dMap(pos) <size.x>X<size.y>X<size.z> 3d array of 3d noise values starting at pos={x=,y=,z=}
get2dMap_flat(pos) Flat <size.x * size.y> element array of 2d noise values starting at pos={x=,y=}
get3dMap_flat(pos) Same as get2dMap_flat, but 3d noise

Noise Params

Here's an example of the noiseparams:

local testparam = {
   offset = 0,
   scale = 1,
   spread = {x=2048, y=2048, z=2048},
   seed = 1337,
   octaves = 6,
   persist = 0.6
}
  • spread: defines how fast the (ex.) terrain high changes (frequency)
  • seed: every seed generates an other perlin map
  • octaves: higher value, higher details

Examples

minetest.register_on_generated(function(minp, maxp, seed)
   local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
   local area = VoxelArea:new{MinEdge=emin, MaxEdge=emax}
   local data = vm:get_data()
   
   --get side length of the current mapgen block
   local side_length = maxp.x - minp.x + 1
   local map_lengths_xyz = {x=side_length, y=side_length, z=side_length}
   local perlin_map = minetest.get_perlin_map(testparam, map_lengths_xyz):get2dMap_flat(minp)

   --loop
   local perlin_index = 1
   for z = minp.z, maxp.z do
      for y = minp.y, maxp.y do
         local vi = area:index(minp.x, y, z)
         for x = minp.x, maxp.x do
             print("Some spam value: "..tostring(perlin_map[vi])
             --more efficient coding - x++
             perlin_index = perlin_index + 1
             vi = vi + 1
         end
         --go back, one side_length
         perlin_index = perlin_index - side_length
      end
      --go forward, one side_length
      perlin_index = perlin_index + side_length
   end
end)
Mbox important.png This article is incomplete.
Please help expand this article to include more useful information.