00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef NOISE_NOISEGEN_H
00024 #define NOISE_NOISEGEN_H
00025
00026 #include <math.h>
00027 #include "basictypes.h"
00028
00029 namespace CS {
00030 namespace Math {
00031 namespace Noise {
00032
00035
00037 enum NoiseQuality
00038 {
00039
00045 QUALITY_FAST = 0,
00046
00052 QUALITY_STD = 1,
00053
00059 QUALITY_BEST = 2
00060
00061 };
00062
00078 double GradientCoherentNoise3D (double x, double y, double z, int seed = 0,
00079 NoiseQuality noiseQuality = QUALITY_STD);
00080
00122 double GradientNoise3D (double fx, double fy, double fz, int ix, int iy,
00123 int iz, int seed = 0);
00124
00140 int IntValueNoise3D (int x, int y, int z, int seed = 0);
00141
00159 inline double MakeInt32Range (double n)
00160 {
00161 if (n >= 1073741824.0) {
00162 return (2.0 * fmod (n, 1073741824.0)) - 1073741824.0;
00163 } else if (n <= -1073741824.0) {
00164 return (2.0 * fmod (n, 1073741824.0)) + 1073741824.0;
00165 } else {
00166 return n;
00167 }
00168 }
00169
00185 double ValueCoherentNoise3D (double x, double y, double z, int seed = 0,
00186 NoiseQuality noiseQuality = QUALITY_STD);
00187
00203 double ValueNoise3D (int x, int y, int z, int seed = 0);
00204
00206
00207 }
00208 }
00209 }
00210
00211 #endif