mirror of
https://github.com/mlepage/heightmap.git
synced 2024-11-19 04:44:23 +00:00
Update README and format LICENSE
This commit is contained in:
parent
d1f10ffd8c
commit
f70a081463
@ -1,4 +1,6 @@
|
||||
Copyright (C) 2011 Marc Lepage
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2011 Marc Lepage
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
68
README
68
README
@ -1,68 +0,0 @@
|
||||
Heightmap module
|
||||
by Marc Lepage
|
||||
|
||||
|
||||
OVERVIEW
|
||||
|
||||
The heightmap module uses the diamond-square algorithm to generate cloud or
|
||||
plasma fractal heightmaps which can be used for terrain.
|
||||
|
||||
|
||||
USAGE
|
||||
|
||||
-- import module
|
||||
require "heightmap"
|
||||
|
||||
-- create 32x32 heightmap
|
||||
map = heightmap.create(32, 32)
|
||||
|
||||
-- examine each height value
|
||||
for x = 0, map.w do
|
||||
for y = 0, map.h do
|
||||
print(map[x][y])
|
||||
end
|
||||
end
|
||||
|
||||
-- define a custom height function (reusing the default but scaling it)
|
||||
function f(map, x, y, d, h)
|
||||
return 2 * heightmap.defaultf(map, x, y, d, h)
|
||||
end
|
||||
|
||||
-- use it to create a larger non-square heightmap
|
||||
map = heightmap.create(100, 200, f)
|
||||
|
||||
|
||||
HOW IT WORKS
|
||||
|
||||
The heightmap must be a square the size of a power of two, plus one, so that
|
||||
it can be evenly divided. For example, 4x4 cells will require 5x5 vertices.
|
||||
If another size is specified, a sufficiently large power of two square will
|
||||
be used, and the result clipped to the desired size.
|
||||
|
||||
First the four corners are seeded with a random value (C).
|
||||
|
||||
Then each square is used to set the value of its center (S) based on the
|
||||
average of its four corners (plus some randomness).
|
||||
|
||||
Then each diamond is used to set the value of its center (D) based on the
|
||||
average of its four points (plus some randomness).
|
||||
|
||||
The square and diamond steps continue until all values have been set:
|
||||
|
||||
4 S 2 D 2 S 1 D 1
|
||||
C...C c...c c.D.c c.d.c cDdDc
|
||||
..... ..... ..... .S.S. DsDsD
|
||||
..... ..S.. D.s.D d.s.d dDsDd
|
||||
..... ..... ..... .S.S. DsDsD
|
||||
C...C c...c c.D.c c.d.c cDdDc
|
||||
|
||||
The default height function randomly displaces values by up to +/- 0.5 of the
|
||||
step size. So above, the corners will be from -2 to +2, the center will be
|
||||
the mean of the corners randomly displaced from -1 to +1, and so on.
|
||||
|
||||
|
||||
RESOURCES
|
||||
|
||||
http://en.wikipedia.org/wiki/Diamond-square_algorithm
|
||||
http://en.wikipedia.org/wiki/Heightmap
|
||||
http://en.wikipedia.org/wiki/Fractal_landscape
|
63
README.md
Normal file
63
README.md
Normal file
@ -0,0 +1,63 @@
|
||||
Heightmap
|
||||
=========
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
||||
A Lua module by Marc Lepage for producing heightmaps.
|
||||
|
||||
The heightmap module uses the diamond-square algorithm to generate cloud or plasma fractal heightmaps which can be used for terrain.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
-- import module
|
||||
require "heightmap"
|
||||
|
||||
-- create 32x32 heightmap
|
||||
map = heightmap.create(32, 32)
|
||||
|
||||
-- examine each height value
|
||||
for x = 0, map.w do
|
||||
for y = 0, map.h do
|
||||
print(map[x][y])
|
||||
end
|
||||
end
|
||||
|
||||
-- define a custom height function
|
||||
-- (reusing the default but scaling it)
|
||||
function f(map, x, y, d, h)
|
||||
return 2 * heightmap.defaultf(map, x, y, d, h)
|
||||
end
|
||||
|
||||
-- use it to create a larger non-square heightmap
|
||||
map = heightmap.create(100, 200, f)
|
||||
|
||||
How it Works
|
||||
------------
|
||||
|
||||
The heightmap must be a square the size of a power of two, plus one, so that it can be evenly divided. For example, 4x4 cells will require 5x5 vertices. If another size is specified, a sufficiently large power of two square will be used, and the result clipped to the desired size.
|
||||
|
||||
First the four corners are seeded with a random value (C).
|
||||
|
||||
Then each square is used to set the value of its center (S) based on the average of its four corners (plus some randomness).
|
||||
|
||||
Then each diamond is used to set the value of its center (D) based on the average of its four points (plus some randomness).
|
||||
|
||||
The square and diamond steps continue until all values have been set:
|
||||
|
||||
4 S 2 D 2 S 1 D 1
|
||||
C...C c...c c.D.c c.d.c cDdDc
|
||||
..... ..... ..... .S.S. DsDsD
|
||||
..... ..S.. D.s.D d.s.d dDsDd
|
||||
..... ..... ..... .S.S. DsDsD
|
||||
C...C c...c c.D.c c.d.c cDdDc
|
||||
|
||||
The default height function randomly displaces values by up to +/- 0.5 of the step size. So above, the corners will be from -2 to +2, the center will be the mean of the corners randomly displaced from -1 to +1, and so on.
|
||||
|
||||
Resources
|
||||
---------
|
||||
|
||||
* [Wikipedia: heightmap](http://en.wikipedia.org/wiki/Heightmap)
|
||||
* [Wikipedia: diamond-square algorithm](http://en.wikipedia.org/wiki/Diamond-square_algorithm)
|
||||
* [Wikipedia: fractal landscape](http://en.wikipedia.org/wiki/Fractal_landscape)
|
Loading…
Reference in New Issue
Block a user