1
0
forked from 0ad/0ad
0ad/source/tools/rmgen/noise.h
Matei 60befbd1cf # Updates to random map generator.
- Added a direct addToClass/removeFromClass API for use in noise-based
maps.
- Raised the sea level in the game world so water can be deeper, and set
it to 0 in script coordinates.
- Moved some class-related utility functions to rmlibrary.js.
- Modified sample maps in light of these changes.
- Committed noise class which I forgot last time.

This was SVN commit r4659.
2006-11-27 00:20:58 +00:00

55 lines
1.2 KiB
C++

///////////////////////////////////////////////////////////////////////////////
//
// Name: Noise.h
// Author: Matei Zaharia
// Contact: matei@wildfiregames.com
//
// Description: 2D and 3D seamless Perlin noise classes. Not optimized for speed yet.
//
// Based on http://www.cs.cmu.edu/~mzucker/code/perlin-noise-math-faq.html
// and http://mrl.nyu.edu/~perlin/paper445.pdf.
//
///////////////////////////////////////////////////////////////////////////////
#ifndef NOISE_H
#define NOISE_H
#include "Vector2D.h"
#include "Vector3D.h"
#include "MathUtil.h"
class Noise2D
{
/// Frequency in X and Y
int freq;
/// freq*freq random gradient vectors in the unit cube
CVector2D_Maths** grads;
public:
Noise2D(int freq);
~Noise2D();
/// Evaluate the noise function at a given point
float operator() (float x, float y);
};
class Noise3D
{
/// Frequency in X and Y
int freq;
/// Frequency in Z (vertical frequency)
int vfreq;
/// freq*freq*vfreq random gradient vectors in the unit cube
CVector3D*** grads;
public:
Noise3D(int freq, int vfreq);
~Noise3D();
/// Evaluate the noise function at a given point
float operator() (float x, float y, float z);
};
#endif