00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "stackedPerlinNoise2.h"
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 StackedPerlinNoise2::
00028 StackedPerlinNoise2(double sx, double sy, int num_levels,
00029 double scale_factor, double amp_scale,
00030 int table_size, unsigned long seed) {
00031 _noises.reserve(num_levels);
00032 double amp = 1.0;
00033 for (int i = 0; i < num_levels; ++i) {
00034 PerlinNoise2 noise(sx, sy, table_size, seed);
00035 add_level(noise, amp);
00036
00037 seed = noise.get_seed();
00038 amp *= amp_scale;
00039 sx /= scale_factor;
00040 sy /= scale_factor;
00041 }
00042 }
00043
00044
00045
00046
00047
00048
00049
00050
00051 StackedPerlinNoise2::
00052 StackedPerlinNoise2(const StackedPerlinNoise2 ©) :
00053 _noises(copy._noises)
00054 {
00055 }
00056
00057
00058
00059
00060
00061
00062
00063
00064 void StackedPerlinNoise2::
00065 operator = (const StackedPerlinNoise2 ©) {
00066 _noises = copy._noises;
00067 }
00068
00069
00070
00071
00072
00073
00074
00075 void StackedPerlinNoise2::
00076 add_level(const PerlinNoise2 &level, double amp) {
00077 _noises.push_back(Noise());
00078 Noise &n = _noises.back();
00079 n._noise = level;
00080 n._amp = amp;
00081 }
00082
00083
00084
00085
00086
00087
00088
00089 void StackedPerlinNoise2::
00090 clear() {
00091 _noises.clear();
00092 }
00093
00094
00095
00096
00097
00098
00099 double StackedPerlinNoise2::
00100 noise(const LVecBase2d &value) {
00101 double result = 0.0;
00102
00103 Noises::iterator ni;
00104 for (ni = _noises.begin(); ni != _noises.end(); ++ni) {
00105 result += (*ni)._noise(value) * (*ni)._amp;
00106 }
00107
00108 return result;
00109 }