public static class WorldMapGenerator.SphereMap extends WorldMapGenerator
WorldMapGenerator
that distorts the map as it nears the poles, expanding the
smaller-diameter latitude lines in extreme north and south regions so they take up the same space as the equator;
this counteracts certain artifacts that are common in Simplex noise world maps by using a 4D noise call to
generate terrain, using a normal 3D noise call's result as the extra 4th dimension. This generator allows
choosing a Noise.Noise3D
, which is used for most of the generation. This is ideal for projecting onto a 3D
sphere, which could squash the poles to counteract the stretch this does. You might also want to produce an oval
map that more-accurately represents the changes in the diameter of a latitude line on a spherical world; you
should use WorldMapGenerator.EllipticalMap
or WorldMapGenerator.EllipticalHammerMap
for this.
WorldMapGenerator.HyperellipticalMap
is also a nice option because it can project onto a shape between a
rectangle (like this class) and an ellipse (like EllipticalMap), with all-round sides.
Example map.WorldMapGenerator.BiomeMapper, WorldMapGenerator.DetailedBiomeMapper, WorldMapGenerator.EllipticalHammerMap, WorldMapGenerator.EllipticalMap, WorldMapGenerator.HexagonalMap, WorldMapGenerator.HyperellipticalMap, WorldMapGenerator.LocalMap, WorldMapGenerator.LocalMimicMap, WorldMapGenerator.MimicMap, WorldMapGenerator.RotatingSpaceMap, WorldMapGenerator.RoundSideMap, WorldMapGenerator.SimpleBiomeMapper, WorldMapGenerator.SpaceViewMap, WorldMapGenerator.SphereMap, WorldMapGenerator.TilingMap
Modifier and Type | Field and Description |
---|---|
Noise.Noise3D |
heat |
protected static double |
heatFreq |
Noise.Noise3D |
moisture |
protected static double |
moistureFreq |
protected static double |
otherFreq |
Noise.Noise3D |
otherRidged |
Noise.Noise3D |
terrain |
protected static double |
terrainFreq |
Noise.Noise3D |
terrainLayered |
protected static double |
terrainRidgedFreq |
double[][] |
xPositions |
double[][] |
yPositions |
double[][] |
zPositions |
cacheA, cacheB, centerLongitude, coastalWaterLower, coastalWaterUpper, deepWaterLower, deepWaterUpper, DEFAULT_NOISE, forestLower, forestUpper, grassLower, grassUpper, heatData, heatModifier, height, heightCodeData, heightData, landData, landModifier, maxHeat, maxHeight, maxHeightActual, maxWet, mediumWaterLower, mediumWaterUpper, minHeat, minHeight, minHeightActual, minWet, moistureData, rng, rockLower, rockUpper, sandLower, sandUpper, seedA, seedB, shallowWaterLower, shallowWaterUpper, snowLower, snowUpper, startCacheX, startCacheY, startX, startY, usedHeight, usedWidth, width, zoom, zoomStartX, zoomStartY
Constructor and Description |
---|
SphereMap()
Constructs a concrete WorldMapGenerator for a map that can be used to wrap a sphere (as with a texture on a
3D model), with seamless east-west wrapping, no north-south wrapping, and distortion that causes the poles to
have significantly-exaggerated-in-size features while the equator is not distorted.
|
SphereMap(int mapWidth,
int mapHeight)
Constructs a concrete WorldMapGenerator for a map that can be used to wrap a sphere (as with a texture on a
3D model), with seamless east-west wrapping, no north-south wrapping, and distortion that causes the poles to
have significantly-exaggerated-in-size features while the equator is not distorted.
|
SphereMap(long initialSeed,
int mapWidth,
int mapHeight)
Constructs a concrete WorldMapGenerator for a map that can be used to wrap a sphere (as with a texture on a
3D model), with seamless east-west wrapping, no north-south wrapping, and distortion that causes the poles to
have significantly-exaggerated-in-size features while the equator is not distorted.
|
SphereMap(long initialSeed,
int mapWidth,
int mapHeight,
double octaveMultiplier)
Constructs a concrete WorldMapGenerator for a map that can be used to wrap a sphere (as with a texture on a
3D model), with seamless east-west wrapping, no north-south wrapping, and distortion that causes the poles to
have significantly-exaggerated-in-size features while the equator is not distorted.
|
SphereMap(long initialSeed,
int mapWidth,
int mapHeight,
Noise.Noise3D noiseGenerator)
Constructs a concrete WorldMapGenerator for a map that can be used to wrap a sphere (as with a texture on a
3D model), with seamless east-west wrapping, no north-south wrapping, and distortion that causes the poles to
have significantly-exaggerated-in-size features while the equator is not distorted.
|
SphereMap(long initialSeed,
int mapWidth,
int mapHeight,
Noise.Noise3D noiseGenerator,
double octaveMultiplier)
Constructs a concrete WorldMapGenerator for a map that can be used to wrap a sphere (as with a texture on a
3D model), with seamless east-west wrapping, no north-south wrapping, and distortion that causes the poles to
have significantly-exaggerated-in-size features while the equator is not distorted.
|
SphereMap(WorldMapGenerator.SphereMap other)
Copies the SphereMap
other to construct a new one that is exactly the same. |
Modifier and Type | Method and Description |
---|---|
Coord |
project(double latitude,
double longitude)
Given a latitude and longitude in radians (the conventional way of describing points on a globe), this gets the
(x,y) Coord on the map projection this generator uses that corresponds to the given lat-lon coordinates.
|
protected void |
regenerate(int startX,
int startY,
int usedWidth,
int usedHeight,
double landMod,
double heatMod,
int stateA,
int stateB) |
int |
wrapY(int x,
int y) |
codeHeight, decodeX, decodeY, generate, generate, generate, getCenterLongitude, removeExcess, setCenterLongitude, wrapX, zoomIn, zoomIn, zoomOut, zoomOut
protected static final double terrainFreq
protected static final double terrainRidgedFreq
protected static final double heatFreq
protected static final double moistureFreq
protected static final double otherFreq
public final Noise.Noise3D terrain
public final Noise.Noise3D heat
public final Noise.Noise3D moisture
public final Noise.Noise3D otherRidged
public final Noise.Noise3D terrainLayered
public final double[][] xPositions
public final double[][] yPositions
public final double[][] zPositions
public SphereMap()
SphereMap#SphereMap(long, int, int, Noise3D, double)
, then this would be the
same as passing the parameters 0x1337BABE1337D00DL, 256, 128, DEFAULT_NOISE, 1.0
.public SphereMap(int mapWidth, int mapHeight)
WorldMapGenerator.generate(long)
. The width and
height of the map cannot be changed after the fact, but you can zoom in.
Uses FastNoise as its noise generator, with 1.0 as the octave multiplier affecting detail.mapWidth
- the width of the map(s) to generate; cannot be changed latermapHeight
- the height of the map(s) to generate; cannot be changed laterpublic SphereMap(long initialSeed, int mapWidth, int mapHeight)
initialSeed
parameter may or may not be used, since you can specify the seed to use when you call WorldMapGenerator.generate(long)
.
The width and height of the map cannot be changed after the fact, but you can zoom in.
Uses FastNoise as its noise generator, with 1.0 as the octave multiplier affecting detail.initialSeed
- the seed for the GWTRNG this uses; this may also be set per-call to generatemapWidth
- the width of the map(s) to generate; cannot be changed latermapHeight
- the height of the map(s) to generate; cannot be changed laterpublic SphereMap(long initialSeed, int mapWidth, int mapHeight, double octaveMultiplier)
initialSeed
parameter may or may not be used, since you can specify the seed to use when you call WorldMapGenerator.generate(long)
.
The width and height of the map cannot be changed after the fact, but you can zoom in.
Uses FastNoise as its noise generator, with the given octave multiplier affecting detail.initialSeed
- the seed for the GWTRNG this uses; this may also be set per-call to generatemapWidth
- the width of the map(s) to generate; cannot be changed latermapHeight
- the height of the map(s) to generate; cannot be changed lateroctaveMultiplier
- used to adjust the level of detail, with 0.5 at the bare-minimum detail and 1.0 normalpublic SphereMap(long initialSeed, int mapWidth, int mapHeight, Noise.Noise3D noiseGenerator)
initialSeed
parameter may or may not be used, since you can specify the seed to use when you call WorldMapGenerator.generate(long)
.
The width and height of the map cannot be changed after the fact, but you can zoom in.
Uses the given noise generator, with 1.0 as the octave multiplier affecting detail.initialSeed
- the seed for the GWTRNG this uses; this may also be set per-call to generatemapWidth
- the width of the map(s) to generate; cannot be changed latermapHeight
- the height of the map(s) to generate; cannot be changed laternoiseGenerator
- an instance of a noise generator capable of 3D noise, usually FastNoise
public SphereMap(long initialSeed, int mapWidth, int mapHeight, Noise.Noise3D noiseGenerator, double octaveMultiplier)
Noise.Noise3D
implementation, which is usually FastNoise.instance
, and a
multiplier on how many octaves of noise to use, with 1.0 being normal (high) detail and higher multipliers
producing even more detailed noise when zoomed-in). The initialSeed
parameter may or may not be used,
since you can specify the seed to use when you call WorldMapGenerator.generate(long)
. The width and height of the map
cannot be changed after the fact, but you can zoom in. FastNoise will be the fastest 3D generator to use for
noiseGenerator
, and the seed it's constructed with doesn't matter because this will change the
seed several times at different scales of noise (it's fine to use the static FastNoise.instance
because it has no changing state between runs of the program). The octaveMultiplier
parameter should
probably be no lower than 0.5, but can be arbitrarily high if you're willing to spend much more time on
generating detail only noticeable at very high zoom; normally 1.0 is fine and may even be too high for maps
that don't require zooming.initialSeed
- the seed for the GWTRNG this uses; this may also be set per-call to generatemapWidth
- the width of the map(s) to generate; cannot be changed latermapHeight
- the height of the map(s) to generate; cannot be changed laternoiseGenerator
- an instance of a noise generator capable of 3D noise, usually FastNoise.instance
octaveMultiplier
- used to adjust the level of detail, with 0.5 at the bare-minimum detail and 1.0 normalpublic SphereMap(WorldMapGenerator.SphereMap other)
other
to construct a new one that is exactly the same. References will only be
shared to Noise classes.other
- a SphereMap to copypublic int wrapY(int x, int y)
wrapY
in class WorldMapGenerator
public Coord project(double latitude, double longitude)
WorldMapGenerator.width
, and y between 0 and WorldMapGenerator.height
, both exclusive. Automatically wraps the Coord's values using
WorldMapGenerator.wrapX(int, int)
and wrapY(int, int)
.project
in class WorldMapGenerator
latitude
- the latitude, from Math.PI * -0.5
to Math.PI * 0.5
longitude
- the longitude, from 0.0
to Math.PI * 2.0
WorldMapGenerator.width
and y between 0 and WorldMapGenerator.height
, or null if unsupportedprotected void regenerate(int startX, int startY, int usedWidth, int usedHeight, double landMod, double heatMod, int stateA, int stateB)
regenerate
in class WorldMapGenerator
Copyright © Eben Howard 2012–2022. All rights reserved.