Amortized Noise Terrain Generator
A Program to Generate Terrain from Amortized Noise with Exponentially Distributed Gradient Magnitude
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
CInfiniteAmortizedNoise2D Class Reference

The amortized 2D noise class. More...

#include <InfiniteAmortizedNoise2D.h>

Inheritance diagram for CInfiniteAmortizedNoise2D:
CTerrainGenerator

Public Member Functions

 CInfiniteAmortizedNoise2D (const unsigned n, const unsigned int s)
 Constructor. More...
 
 ~CInfiniteAmortizedNoise2D ()
 Destructor.
 
float generate (int x, int y, const int m0, const int m1, const int n, float **cell)
 Generate a cell of 2D amortized noise. More...
 

Protected Member Functions

virtual unsigned int h (const unsigned int x, const unsigned int y)
 2D hash function. More...
 
void FillUp (float *t, const float s, const int n)
 Fill amortized noise table bottom up. More...
 
void FillDn (float *t, const float s, const int n)
 Fill amortized noise table top down. More...
 
virtual void initEdgeTables (const int x, const int y, const int n)
 Initialize the amortized noise tables. More...
 
void initSplineTable (const int n)
 Initialize the spline table. More...
 
float getNoise (const int i, const int j)
 Get one point of amortized noise. More...
 
void getNoise (const int n, const int i0, const int j0, float **cell)
 Get 1 octave of amortized noise into cell. More...
 
void addNoise (const int n, const int i0, const int j0, const float scale, float **cell)
 Add 1 octave of amortized noise into cell. More...
 

Protected Attributes

float * uax
 X coordinate of u used to compute a.
 
float * vax
 X coordinate of v used to compute a.
 
float * ubx
 X coordinate of u used to compute b.
 
float * vbx
 X coordinate of v used to compute b.
 
float * uay
 Y coordinate of u used to compute a.
 
float * vay
 Y coordinate of v used to compute a.
 
float * uby
 Y coordinate of u used to compute b.
 
float * vby
 Y coordinate of v used to compute b.
 
float * spline
 Spline table.
 
unsigned int seed
 Hash seed.
 

Detailed Description

The 2D amortized noise class implements the 2D infinite amortized noise algorithm.

Constructor & Destructor Documentation

◆ CInfiniteAmortizedNoise2D()

CInfiniteAmortizedNoise2D::CInfiniteAmortizedNoise2D ( const unsigned  n,
const unsigned int  s 
)

Constructor.

Parameters
nCell size.
sHash function seed.

Member Function Documentation

◆ addNoise()

void CInfiniteAmortizedNoise2D::addNoise ( const int  n,
const int  i0,
const int  j0,
const float  scale,
float **  cell 
)
protected

Add a single octave of noise into a subcell. This differs from CInfiniteAmortizedNoise2D::getNoise in that it adds the noise to the cell instead of copying it there.

Parameters
nGranularity.
i0x offset of this subcell in cell.
j0y offset of this subcell in cell.
scaleNoise is to be rescaled by this factor.
cellNoise cell.

◆ FillDn()

void CInfiniteAmortizedNoise2D::FillDn ( float *  t,
const float  s,
const int  n 
)
protected

Fill amortized noise table top down.

Parameters
tAmortized noise table.
sInitial value.
nGranularity.

◆ FillUp()

void CInfiniteAmortizedNoise2D::FillUp ( float *  t,
const float  s,
const int  n 
)
protected

Fill amortized noise table bottom up.

Parameters
tAmortized noise table.
sInitial value.
nGranularity.

◆ generate()

float CInfiniteAmortizedNoise2D::generate ( int  x,
int  y,
const int  m0,
const int  m1,
const int  n,
float **  cell 
)

Generate a cell of 1/f amortized noise with persistence 0.5 and lacunarity 2.0.

Parameters
xx coordinate of top left corner of cell.
yy coordinate of top left corner of cell.
m0First octave.
m1Last octave.
nGranularity.
cellCell to put generated noise into.
Returns
Multiply noise by this to get into the range -1..1

◆ getNoise() [1/2]

float CInfiniteAmortizedNoise2D::getNoise ( const int  i,
const int  j 
)
protected

Compute a single point of a single octave of Perlin noise. This is similar to Perlin's noise2 function except that it substitutes table lookups for floating pointmultiplication as described in the paper "Amortized Noise".

Parameters
ix coordinate of point.
jy coordinate of point.
Returns
Noise value at (x, y).

◆ getNoise() [2/2]

void CInfiniteAmortizedNoise2D::getNoise ( const int  n,
const int  i0,
const int  j0,
float **  cell 
)
protected

Get a single octave of noise into a subcell. This differs from CInfiniteAmortizedNoise2D::addNoise in that it copies the noise to the cell instead of adding it in.

Parameters
nGranularity.
i0x offset of this subcell in cell.
j0y offset of this subcell in cell.
cellNoise cell.

◆ h()

unsigned int CInfiniteAmortizedNoise2D::h ( const unsigned int  x,
const unsigned int  y 
)
protectedvirtual

A 2D hash function. Hash two dimensions into a single unsigned int using MurmurHash.

Parameters
xX coordinate of value to be hashed.
yY coordinate of value to be hashed.
Returns
Hash of (x, y).

◆ initEdgeTables()

void CInfiniteAmortizedNoise2D::initEdgeTables ( const int  x0,
const int  y0,
const int  n 
)
protectedvirtual

Initialize the amortized noise tables.

Parameters
x0x coordinate of top left corner of cell.
y0y coordinate of top left corner of cell.
nGranularity.

Reimplemented in CTerrainGenerator.

◆ initSplineTable()

void CInfiniteAmortizedNoise2D::initSplineTable ( const int  n)
protected

Initialize the spline table as described in the paper "Amortized Noise".

Parameters
nGranularity.

The documentation for this class was generated from the following files: