This code has been moved to the Worldforge repository.
Mercator is primarily aimed at terrain for multiplayer online games and forms one of the WorldForge core libraries. It is intended to be used as a terrain library on both the client and the server.
If you intend to build this as a prerequisite for the Ember client or the Cyphesis server we strongly suggest that you use the Hammer tool to compile it. This is script provided by the Worldforge project which will download and install all of the required libraries and components used by Worldforge.
Alternatively you can use Conan to install all dependencies.
conan remote add worldforge https://artifactory.ogenvik.org/artifactory/api/conan/conan
conan install tools/conan --build missing
cmake --preset conan-release
cmake --build --preset conan-release
Otherwise the library can most easily be built through the following commands.
mkdir build && cd build
cmake ..
make -j all install
The test suite can be built and run using the check
target. For example:
make check
or
cmake --build --preset conan-release --target check
If Doxygen is available API documentation can be generated using the dox
target. For example:
make dox
or
cmake --build --preset conan-release --target dox
Mercator is designed in such a way that individual tiles can be generated on-the-fly from a very small source data set. Each tile uses a fast deterministic random number generation to ensure that identical results are produced "anytime, anywhere". This enables transmission of terrain across low bandwidth links as part of the standard data stream, or server side collision detection with the same terrain that the player sees.
The use of tiles means that there is inherently a large degree of gross control of the shape of the terrain. Finer control is implemented by allowing geometric modifications - for example, a polygonal area might be flattened, or a crater could be applied.
- uses deterministic random number generation and seeds to generate detailed terrain from sparse control points.
- each tile is seeded using the four surrounding control points
- shape of each tile is influenced by height, roughness and falloff parameters
- geometric modifications can be applied for small features
- new types of modifications can be added quite easily
- generate shading information based on height and gradient
- new types of shaders can be added quite easily
- used on the client side
basic terrain intersection/collision functions are implemented for
- bbox
- point
- ray
Basic support for generation of forests in much the same way as terrain. Forest shape (polygonal) is supported Tree location, orientation and height are generated from a random seed. Currently incomplete and has hardcoded parameters
- multiple resolutions in the one terrain are unsupported
If you're interested in helping out with development you should check out these resources: