Tiled 2D Amortized Noise
A Program to Generate Infinite Grayscale Noise Textures with Amortized Noise
 All Classes Files Functions Variables Macros Pages
Public Member Functions | Private Member Functions | Private Attributes | List of all members
CInfiniteAmortizedNoise2D Class Reference

The amortized 2D noise class. More...

#include <InfiniteAmortizedNoise2D.h>

Public Member Functions

 CInfiniteAmortizedNoise2D (const unsigned n, const unsigned int s)
 Constructor.
 
 ~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.
 

Private Member Functions

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

Private 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 ( const unsigned  n,
const unsigned int  s 
)

Constructor.

Parameters
nCell size.
sHash function seed.

Member Function Documentation

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

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.
void CInfiniteAmortizedNoise2D::FillDn ( float *  t,
const float  s,
const int  n 
)
private

Fill amortized noise table top down.

Parameters
tAmortized noise table.
sInitial value.
nGranularity.
void CInfiniteAmortizedNoise2D::FillUp ( float *  t,
const float  s,
const int  n 
)
private

Fill amortized noise table bottom up.

Parameters
tAmortized noise table.
sInitial value.
nGranularity.
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
float CInfiniteAmortizedNoise2D::getNoise ( const int  i,
const int  j 
)
private

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).
void CInfiniteAmortizedNoise2D::getNoise ( const int  n,
const int  i0,
const int  j0,
float **  cell 
)
private

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.
unsigned int CInfiniteAmortizedNoise2D::h ( const unsigned int  x,
const unsigned int  y 
)
private

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).
void CInfiniteAmortizedNoise2D::initEdgeTables ( const int  x0,
const int  y0,
const int  n 
)
private

Initialize the amortized noise tables.

Parameters
x0x coordinate of top left corner of cell.
y0y coordinate of top left corner of cell.
nGranularity.
void CInfiniteAmortizedNoise2D::initSplineTable ( const int  n)
private

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

Parameters
nGranularity.

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