00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #include <math.h>
00035
00036 #include "blender_noiselib.h"
00037
00038 namespace blender
00039 {
00040
00041
00042 float noise3_perlin(float vec[3]);
00043 float turbulence_perlin(float *point, float lofreq, float hifreq);
00044 float turbulencep(float noisesize, float x, float y, float z, int nr);
00045
00046 #define HASHVEC(x,y,z) hashvectf+3*hash[ (hash[ (hash[(z) & 255]+(y)) & 255]+(x)) & 255]
00047
00048
00049 #define HASHPNT(x,y,z) hashpntf+3*hash[ (hash[ (hash[(z) & 255]+(y)) & 255]+(x)) & 255]
00050 static float hashpntf[768] = {0.536902, 0.020915, 0.501445, 0.216316, 0.517036, 0.822466, 0.965315,
00051 0.377313, 0.678764, 0.744545, 0.097731, 0.396357, 0.247202, 0.520897,
00052 0.613396, 0.542124, 0.146813, 0.255489, 0.810868, 0.638641, 0.980742,
00053 0.292316, 0.357948, 0.114382, 0.861377, 0.629634, 0.722530, 0.714103,
00054 0.048549, 0.075668, 0.564920, 0.162026, 0.054466, 0.411738, 0.156897,
00055 0.887657, 0.599368, 0.074249, 0.170277, 0.225799, 0.393154, 0.301348,
00056 0.057434, 0.293849, 0.442745, 0.150002, 0.398732, 0.184582, 0.915200,
00057 0.630984, 0.974040, 0.117228, 0.795520, 0.763238, 0.158982, 0.616211,
00058 0.250825, 0.906539, 0.316874, 0.676205, 0.234720, 0.667673, 0.792225,
00059 0.273671, 0.119363, 0.199131, 0.856716, 0.828554, 0.900718, 0.705960,
00060 0.635923, 0.989433, 0.027261, 0.283507, 0.113426, 0.388115, 0.900176,
00061 0.637741, 0.438802, 0.715490, 0.043692, 0.202640, 0.378325, 0.450325,
00062 0.471832, 0.147803, 0.906899, 0.524178, 0.784981, 0.051483, 0.893369,
00063 0.596895, 0.275635, 0.391483, 0.844673, 0.103061, 0.257322, 0.708390,
00064 0.504091, 0.199517, 0.660339, 0.376071, 0.038880, 0.531293, 0.216116,
00065 0.138672, 0.907737, 0.807994, 0.659582, 0.915264, 0.449075, 0.627128,
00066 0.480173, 0.380942, 0.018843, 0.211808, 0.569701, 0.082294, 0.689488,
00067 0.573060, 0.593859, 0.216080, 0.373159, 0.108117, 0.595539, 0.021768,
00068 0.380297, 0.948125, 0.377833, 0.319699, 0.315249, 0.972805, 0.792270,
00069 0.445396, 0.845323, 0.372186, 0.096147, 0.689405, 0.423958, 0.055675,
00070 0.117940, 0.328456, 0.605808, 0.631768, 0.372170, 0.213723, 0.032700,
00071 0.447257, 0.440661, 0.728488, 0.299853, 0.148599, 0.649212, 0.498381,
00072 0.049921, 0.496112, 0.607142, 0.562595, 0.990246, 0.739659, 0.108633,
00073 0.978156, 0.209814, 0.258436, 0.876021, 0.309260, 0.600673, 0.713597,
00074 0.576967, 0.641402, 0.853930, 0.029173, 0.418111, 0.581593, 0.008394,
00075 0.589904, 0.661574, 0.979326, 0.275724, 0.111109, 0.440472, 0.120839,
00076 0.521602, 0.648308, 0.284575, 0.204501, 0.153286, 0.822444, 0.300786,
00077 0.303906, 0.364717, 0.209038, 0.916831, 0.900245, 0.600685, 0.890002,
00078 0.581660, 0.431154, 0.705569, 0.551250, 0.417075, 0.403749, 0.696652,
00079 0.292652, 0.911372, 0.690922, 0.323718, 0.036773, 0.258976, 0.274265,
00080 0.225076, 0.628965, 0.351644, 0.065158, 0.080340, 0.467271, 0.130643,
00081 0.385914, 0.919315, 0.253821, 0.966163, 0.017439, 0.392610, 0.478792,
00082 0.978185, 0.072691, 0.982009, 0.097987, 0.731533, 0.401233, 0.107570,
00083 0.349587, 0.479122, 0.700598, 0.481751, 0.788429, 0.706864, 0.120086,
00084 0.562691, 0.981797, 0.001223, 0.192120, 0.451543, 0.173092, 0.108960,
00085 0.549594, 0.587892, 0.657534, 0.396365, 0.125153, 0.666420, 0.385823,
00086 0.890916, 0.436729, 0.128114, 0.369598, 0.759096, 0.044677, 0.904752,
00087 0.088052, 0.621148, 0.005047, 0.452331, 0.162032, 0.494238, 0.523349,
00088 0.741829, 0.698450, 0.452316, 0.563487, 0.819776, 0.492160, 0.004210,
00089 0.647158, 0.551475, 0.362995, 0.177937, 0.814722, 0.727729, 0.867126,
00090 0.997157, 0.108149, 0.085726, 0.796024, 0.665075, 0.362462, 0.323124,
00091 0.043718, 0.042357, 0.315030, 0.328954, 0.870845, 0.683186, 0.467922,
00092 0.514894, 0.809971, 0.631979, 0.176571, 0.366320, 0.850621, 0.505555,
00093 0.749551, 0.750830, 0.401714, 0.481216, 0.438393, 0.508832, 0.867971,
00094 0.654581, 0.058204, 0.566454, 0.084124, 0.548539, 0.902690, 0.779571,
00095 0.562058, 0.048082, 0.863109, 0.079290, 0.713559, 0.783496, 0.265266,
00096 0.672089, 0.786939, 0.143048, 0.086196, 0.876129, 0.408708, 0.229312,
00097 0.629995, 0.206665, 0.207308, 0.710079, 0.341704, 0.264921, 0.028748,
00098 0.629222, 0.470173, 0.726228, 0.125243, 0.328249, 0.794187, 0.741340,
00099 0.489895, 0.189396, 0.724654, 0.092841, 0.039809, 0.860126, 0.247701,
00100 0.655331, 0.964121, 0.672536, 0.044522, 0.690567, 0.837238, 0.631520,
00101 0.953734, 0.352484, 0.289026, 0.034152, 0.852575, 0.098454, 0.795529,
00102 0.452181, 0.826159, 0.186993, 0.820725, 0.440328, 0.922137, 0.704592,
00103 0.915437, 0.738183, 0.733461, 0.193798, 0.929213, 0.161390, 0.318547,
00104 0.888751, 0.430968, 0.740837, 0.193544, 0.872253, 0.563074, 0.274598,
00105 0.347805, 0.666176, 0.449831, 0.800991, 0.588727, 0.052296, 0.714761,
00106 0.420620, 0.570325, 0.057550, 0.210888, 0.407312, 0.662848, 0.924382,
00107 0.895958, 0.775198, 0.688605, 0.025721, 0.301913, 0.791408, 0.500602,
00108 0.831984, 0.828509, 0.642093, 0.494174, 0.525880, 0.446365, 0.440063,
00109 0.763114, 0.630358, 0.223943, 0.333806, 0.906033, 0.498306, 0.241278,
00110 0.427640, 0.772683, 0.198082, 0.225379, 0.503894, 0.436599, 0.016503,
00111 0.803725, 0.189878, 0.291095, 0.499114, 0.151573, 0.079031, 0.904618,
00112 0.708535, 0.273900, 0.067419, 0.317124, 0.936499, 0.716511, 0.543845,
00113 0.939909, 0.826574, 0.715090, 0.154864, 0.750150, 0.845808, 0.648108,
00114 0.556564, 0.644757, 0.140873, 0.799167, 0.632989, 0.444245, 0.471978,
00115 0.435910, 0.359793, 0.216241, 0.007633, 0.337236, 0.857863, 0.380247,
00116 0.092517, 0.799973, 0.919000, 0.296798, 0.096989, 0.854831, 0.165369,
00117 0.568475, 0.216855, 0.020457, 0.835511, 0.538039, 0.999742, 0.620226,
00118 0.244053, 0.060399, 0.323007, 0.294874, 0.988899, 0.384919, 0.735655,
00119 0.773428, 0.549776, 0.292882, 0.660611, 0.593507, 0.621118, 0.175269,
00120 0.682119, 0.794493, 0.868197, 0.632150, 0.807823, 0.509656, 0.482035,
00121 0.001780, 0.259126, 0.358002, 0.280263, 0.192985, 0.290367, 0.208111,
00122 0.917633, 0.114422, 0.925491, 0.981110, 0.255570, 0.974862, 0.016629,
00123 0.552599, 0.575741, 0.612978, 0.615965, 0.803615, 0.772334, 0.089745,
00124 0.838812, 0.634542, 0.113709, 0.755832, 0.577589, 0.667489, 0.529834,
00125 0.325660, 0.817597, 0.316557, 0.335093, 0.737363, 0.260951, 0.737073,
00126 0.049540, 0.735541, 0.988891, 0.299116, 0.147695, 0.417271, 0.940811,
00127 0.524160, 0.857968, 0.176403, 0.244835, 0.485759, 0.033353, 0.280319,
00128 0.750688, 0.755809, 0.924208, 0.095956, 0.962504, 0.275584, 0.173715,
00129 0.942716, 0.706721, 0.078464, 0.576716, 0.804667, 0.559249, 0.900611,
00130 0.646904, 0.432111, 0.927885, 0.383277, 0.269973, 0.114244, 0.574867,
00131 0.150703, 0.241855, 0.272871, 0.199950, 0.079719, 0.868566, 0.962833,
00132 0.789122, 0.320025, 0.905554, 0.234876, 0.991356, 0.061913, 0.732911,
00133 0.785960, 0.874074, 0.069035, 0.658632, 0.309901, 0.023676, 0.791603,
00134 0.764661, 0.661278, 0.319583, 0.829650, 0.117091, 0.903124, 0.982098,
00135 0.161631, 0.193576, 0.670428, 0.857390, 0.003760, 0.572578, 0.222162,
00136 0.114551, 0.420118, 0.530404, 0.470682, 0.525527, 0.764281, 0.040596,
00137 0.443275, 0.501124, 0.816161, 0.417467, 0.332172, 0.447565, 0.614591,
00138 0.559246, 0.805295, 0.226342, 0.155065, 0.714630, 0.160925, 0.760001,
00139 0.453456, 0.093869, 0.406092, 0.264801, 0.720370, 0.743388, 0.373269,
00140 0.403098, 0.911923, 0.897249, 0.147038, 0.753037, 0.516093, 0.739257,
00141 0.175018, 0.045768, 0.735857, 0.801330, 0.927708, 0.240977, 0.591870,
00142 0.921831, 0.540733, 0.149100, 0.423152, 0.806876, 0.397081, 0.061100,
00143 0.811630, 0.044899, 0.460915, 0.961202, 0.822098, 0.971524, 0.867608,
00144 0.773604, 0.226616, 0.686286, 0.926972, 0.411613, 0.267873, 0.081937,
00145 0.226124, 0.295664, 0.374594, 0.533240, 0.237876, 0.669629, 0.599083,
00146 0.513081, 0.878719, 0.201577, 0.721296, 0.495038, 0.079760, 0.965959,
00147 0.233090, 0.052496, 0.714748, 0.887844, 0.308724, 0.972885, 0.723337,
00148 0.453089, 0.914474, 0.704063, 0.823198, 0.834769, 0.906561, 0.919600,
00149 0.100601, 0.307564, 0.901977, 0.468879, 0.265376, 0.885188, 0.683875,
00150 0.868623, 0.081032, 0.466835, 0.199087, 0.663437, 0.812241, 0.311337,
00151 0.821361, 0.356628, 0.898054, 0.160781, 0.222539, 0.714889, 0.490287,
00152 0.984915, 0.951755, 0.964097, 0.641795, 0.815472, 0.852732, 0.862074,
00153 0.051108, 0.440139, 0.323207, 0.517171, 0.562984, 0.115295, 0.743103,
00154 0.977914, 0.337596, 0.440694, 0.535879, 0.959427, 0.351427, 0.704361,
00155 0.010826, 0.131162, 0.577080, 0.349572, 0.774892, 0.425796, 0.072697,
00156 0.500001, 0.267322, 0.909654, 0.206176, 0.223987, 0.937698, 0.323423,
00157 0.117501, 0.490308, 0.474372, 0.689943, 0.168671, 0.719417, 0.188928,
00158 0.330464, 0.265273, 0.446271, 0.171933, 0.176133, 0.474616, 0.140182,
00159 0.114246, 0.905043, 0.713870, 0.555261, 0.951333};
00160
00161 unsigned char hash[512]= {
00162 0xA2,0xA0,0x19,0x3B,0xF8,0xEB,0xAA,0xEE,0xF3,0x1C,0x67,0x28,0x1D,0xED,0x0,0xDE,0x95,0x2E,0xDC,0x3F,0x3A,0x82,0x35,0x4D,0x6C,0xBA,0x36,0xD0,0xF6,0xC,0x79,0x32,0xD1,0x59,0xF4,0x8,0x8B,0x63,0x89,0x2F,0xB8,0xB4,0x97,0x83,0xF2,0x8F,0x18,0xC7,0x51,0x14,0x65,0x87,0x48,0x20,0x42,0xA8,0x80,0xB5,0x40,0x13,0xB2,0x22,0x7E,0x57,
00163 0xBC,0x7F,0x6B,0x9D,0x86,0x4C,0xC8,0xDB,0x7C,0xD5,0x25,0x4E,0x5A,0x55,0x74,0x50,0xCD,0xB3,0x7A,0xBB,0xC3,0xCB,0xB6,0xE2,0xE4,0xEC,0xFD,0x98,0xB,0x96,0xD3,0x9E,0x5C,0xA1,0x64,0xF1,0x81,0x61,0xE1,0xC4,0x24,0x72,0x49,0x8C,0x90,0x4B,0x84,0x34,0x38,0xAB,0x78,0xCA,0x1F,0x1,0xD7,0x93,0x11,0xC1,0x58,0xA9,0x31,0xF9,0x44,0x6D,
00164 0xBF,0x33,0x9C,0x5F,0x9,0x94,0xA3,0x85,0x6,0xC6,0x9A,0x1E,0x7B,0x46,0x15,0x30,0x27,0x2B,0x1B,0x71,0x3C,0x5B,0xD6,0x6F,0x62,0xAC,0x4F,0xC2,0xC0,0xE,0xB1,0x23,0xA7,0xDF,0x47,0xB0,0x77,0x69,0x5,0xE9,0xE6,0xE7,0x76,0x73,0xF,0xFE,0x6E,0x9B,0x56,0xEF,0x12,0xA5,0x37,0xFC,0xAE,0xD9,0x3,0x8E,0xDD,0x10,0xB9,0xCE,0xC9,0x8D,
00165 0xDA,0x2A,0xBD,0x68,0x17,0x9F,0xBE,0xD4,0xA,0xCC,0xD2,0xE8,0x43,0x3D,0x70,0xB7,0x2,0x7D,0x99,0xD8,0xD,0x60,0x8A,0x4,0x2C,0x3E,0x92,0xE5,0xAF,0x53,0x7,0xE0,0x29,0xA6,0xC5,0xE3,0xF5,0xF7,0x4A,0x41,0x26,0x6A,0x16,0x5E,0x52,0x2D,0x21,0xAD,0xF0,0x91,0xFF,0xEA,0x54,0xFA,0x66,0x1A,0x45,0x39,0xCF,0x75,0xA4,0x88,0xFB,0x5D,
00166 0xA2,0xA0,0x19,0x3B,0xF8,0xEB,0xAA,0xEE,0xF3,0x1C,0x67,0x28,0x1D,0xED,0x0,0xDE,0x95,0x2E,0xDC,0x3F,0x3A,0x82,0x35,0x4D,0x6C,0xBA,0x36,0xD0,0xF6,0xC,0x79,0x32,0xD1,0x59,0xF4,0x8,0x8B,0x63,0x89,0x2F,0xB8,0xB4,0x97,0x83,0xF2,0x8F,0x18,0xC7,0x51,0x14,0x65,0x87,0x48,0x20,0x42,0xA8,0x80,0xB5,0x40,0x13,0xB2,0x22,0x7E,0x57,
00167 0xBC,0x7F,0x6B,0x9D,0x86,0x4C,0xC8,0xDB,0x7C,0xD5,0x25,0x4E,0x5A,0x55,0x74,0x50,0xCD,0xB3,0x7A,0xBB,0xC3,0xCB,0xB6,0xE2,0xE4,0xEC,0xFD,0x98,0xB,0x96,0xD3,0x9E,0x5C,0xA1,0x64,0xF1,0x81,0x61,0xE1,0xC4,0x24,0x72,0x49,0x8C,0x90,0x4B,0x84,0x34,0x38,0xAB,0x78,0xCA,0x1F,0x1,0xD7,0x93,0x11,0xC1,0x58,0xA9,0x31,0xF9,0x44,0x6D,
00168 0xBF,0x33,0x9C,0x5F,0x9,0x94,0xA3,0x85,0x6,0xC6,0x9A,0x1E,0x7B,0x46,0x15,0x30,0x27,0x2B,0x1B,0x71,0x3C,0x5B,0xD6,0x6F,0x62,0xAC,0x4F,0xC2,0xC0,0xE,0xB1,0x23,0xA7,0xDF,0x47,0xB0,0x77,0x69,0x5,0xE9,0xE6,0xE7,0x76,0x73,0xF,0xFE,0x6E,0x9B,0x56,0xEF,0x12,0xA5,0x37,0xFC,0xAE,0xD9,0x3,0x8E,0xDD,0x10,0xB9,0xCE,0xC9,0x8D,
00169 0xDA,0x2A,0xBD,0x68,0x17,0x9F,0xBE,0xD4,0xA,0xCC,0xD2,0xE8,0x43,0x3D,0x70,0xB7,0x2,0x7D,0x99,0xD8,0xD,0x60,0x8A,0x4,0x2C,0x3E,0x92,0xE5,0xAF,0x53,0x7,0xE0,0x29,0xA6,0xC5,0xE3,0xF5,0xF7,0x4A,0x41,0x26,0x6A,0x16,0x5E,0x52,0x2D,0x21,0xAD,0xF0,0x91,0xFF,0xEA,0x54,0xFA,0x66,0x1A,0x45,0x39,0xCF,0x75,0xA4,0x88,0xFB,0x5D,
00170 };
00171
00172
00173 float hashvectf[768]= {
00174 0.33783,0.715698,-0.611206,-0.944031,-0.326599,-0.045624,-0.101074,-0.416443,-0.903503,0.799286,0.49411,-0.341949,-0.854645,0.518036,0.033936,0.42514,-0.437866,-0.792114,-0.358948,0.597046,0.717377,-0.985413,0.144714,0.089294,-0.601776,-0.33728,-0.723907,-0.449921,0.594513,0.666382,0.208313,-0.10791,
00175 0.972076,0.575317,0.060425,0.815643,0.293365,-0.875702,-0.383453,0.293762,0.465759,0.834686,-0.846008,-0.233398,-0.47934,-0.115814,0.143036,-0.98291,0.204681,-0.949036,-0.239532,0.946716,-0.263947,0.184326,-0.235596,0.573822,0.784332,0.203705,-0.372253,-0.905487,0.756989,-0.651031,0.055298,0.497803,
00176 0.814697,-0.297363,-0.16214,0.063995,-0.98468,-0.329254,0.834381,0.441925,0.703827,-0.527039,-0.476227,0.956421,0.266113,0.119781,0.480133,0.482849,0.7323,-0.18631,0.961212,-0.203125,-0.748474,-0.656921,-0.090393,-0.085052,-0.165253,0.982544,-0.76947,0.628174,-0.115234,0.383148,0.537659,0.751068,
00177 0.616486,-0.668488,-0.415924,-0.259979,-0.630005,0.73175,0.570953,-0.087952,0.816223,-0.458008,0.023254,0.888611,-0.196167,0.976563,-0.088287,-0.263885,-0.69812,-0.665527,0.437134,-0.892273,-0.112793,-0.621674,-0.230438,0.748566,0.232422,0.900574,-0.367249,0.22229,-0.796143,0.562744,-0.665497,-0.73764,
00178 0.11377,0.670135,0.704803,0.232605,0.895599,0.429749,-0.114655,-0.11557,-0.474243,0.872742,0.621826,0.604004,-0.498444,-0.832214,0.012756,0.55426,-0.702484,0.705994,-0.089661,-0.692017,0.649292,0.315399,-0.175995,-0.977997,0.111877,0.096954,-0.04953,0.994019,0.635284,-0.606689,-0.477783,-0.261261,
00179 -0.607422,-0.750153,0.983276,0.165436,0.075958,-0.29837,0.404083,-0.864655,-0.638672,0.507721,0.578156,0.388214,0.412079,0.824249,0.556183,-0.208832,0.804352,0.778442,0.562012,0.27951,-0.616577,0.781921,-0.091522,0.196289,0.051056,0.979187,-0.121216,0.207153,-0.970734,-0.173401,-0.384735,0.906555,
00180 0.161499,-0.723236,-0.671387,0.178497,-0.006226,-0.983887,-0.126038,0.15799,0.97934,0.830475,-0.024811,0.556458,-0.510132,-0.76944,0.384247,0.81424,0.200104,-0.544891,-0.112549,-0.393311,-0.912445,0.56189,0.152222,-0.813049,0.198914,-0.254517,-0.946381,-0.41217,0.690979,-0.593811,-0.407257,0.324524,
00181 0.853668,-0.690186,0.366119,-0.624115,-0.428345,0.844147,-0.322296,-0.21228,-0.297546,-0.930756,-0.273071,0.516113,0.811798,0.928314,0.371643,0.007233,0.785828,-0.479218,-0.390778,-0.704895,0.058929,0.706818,0.173248,0.203583,0.963562,0.422211,-0.904297,-0.062469,-0.363312,-0.182465,0.913605,0.254028,
00182 -0.552307,-0.793945,-0.28891,-0.765747,-0.574554,0.058319,0.291382,0.954803,0.946136,-0.303925,0.111267,-0.078156,0.443695,-0.892731,0.182098,0.89389,0.409515,-0.680298,-0.213318,0.701141,0.062469,0.848389,-0.525635,-0.72879,-0.641846,0.238342,-0.88089,0.427673,0.202637,-0.532501,-0.21405,0.818878,
00183 0.948975,-0.305084,0.07962,0.925446,0.374664,0.055817,0.820923,0.565491,0.079102,0.25882,0.099792,-0.960724,-0.294617,0.910522,0.289978,0.137115,0.320038,-0.937408,-0.908386,0.345276,-0.235718,-0.936218,0.138763,0.322754,0.366577,0.925934,-0.090637,0.309296,-0.686829,-0.657684,0.66983,0.024445,
00184 0.742065,-0.917999,-0.059113,-0.392059,0.365509,0.462158,-0.807922,0.083374,0.996399,-0.014801,0.593842,0.253143,-0.763672,0.974976,-0.165466,0.148285,0.918976,0.137299,0.369537,0.294952,0.694977,0.655731,0.943085,0.152618,-0.295319,0.58783,-0.598236,0.544495,0.203796,0.678223,0.705994,-0.478821,
00185 -0.661011,0.577667,0.719055,-0.1698,-0.673828,-0.132172,-0.965332,0.225006,-0.981873,-0.14502,0.121979,0.763458,0.579742,0.284546,-0.893188,0.079681,0.442474,-0.795776,-0.523804,0.303802,0.734955,0.67804,-0.007446,0.15506,0.986267,-0.056183,0.258026,0.571503,-0.778931,-0.681549,-0.702087,-0.206116,
00186 -0.96286,-0.177185,0.203613,-0.470978,-0.515106,0.716095,-0.740326,0.57135,0.354095,-0.56012,-0.824982,-0.074982,-0.507874,0.753204,0.417969,-0.503113,0.038147,0.863342,0.594025,0.673553,-0.439758,-0.119873,-0.005524,-0.992737,0.098267,-0.213776,0.971893,-0.615631,0.643951,0.454163,0.896851,-0.441071,
00187 0.032166,-0.555023,0.750763,-0.358093,0.398773,0.304688,0.864929,-0.722961,0.303589,0.620544,-0.63559,-0.621948,-0.457306,-0.293243,0.072327,0.953278,-0.491638,0.661041,-0.566772,-0.304199,-0.572083,-0.761688,0.908081,-0.398956,0.127014,-0.523621,-0.549683,-0.650848,-0.932922,-0.19986,0.299408,0.099426,
00188 0.140869,0.984985,-0.020325,-0.999756,-0.002319,0.952667,0.280853,-0.11615,-0.971893,0.082581,0.220337,0.65921,0.705292,-0.260651,0.733063,-0.175537,0.657043,-0.555206,0.429504,-0.712189,0.400421,-0.89859,0.179352,0.750885,-0.19696,0.630341,0.785675,-0.569336,0.241821,-0.058899,-0.464111,0.883789,
00189 0.129608,-0.94519,0.299622,-0.357819,0.907654,0.219238,-0.842133,-0.439117,-0.312927,-0.313477,0.84433,0.434479,-0.241211,0.053253,0.968994,0.063873,0.823273,0.563965,0.476288,0.862152,-0.172516,0.620941,-0.298126,0.724915,0.25238,-0.749359,-0.612122,-0.577545,0.386566,0.718994,-0.406342,-0.737976,
00190 0.538696,0.04718,0.556305,0.82959,-0.802856,0.587463,0.101166,-0.707733,-0.705963,0.026428,0.374908,0.68457,0.625092,0.472137,0.208405,-0.856506,-0.703064,-0.581085,-0.409821,-0.417206,-0.736328,0.532623,-0.447876,-0.20285,-0.870728,0.086945,-0.990417,0.107086,0.183685,0.018341,-0.982788,0.560638,
00191 -0.428864,0.708282,0.296722,-0.952576,-0.0672,0.135773,0.990265,0.030243,-0.068787,0.654724,0.752686,0.762604,-0.551758,0.337585,-0.819611,-0.407684,0.402466,-0.727844,-0.55072,-0.408539,-0.855774,-0.480011,0.19281,0.693176,-0.079285,0.716339,0.226013,0.650116,-0.725433,0.246704,0.953369,-0.173553,
00192 -0.970398,-0.239227,-0.03244,0.136383,-0.394318,0.908752,0.813232,0.558167,0.164368,0.40451,0.549042,-0.731323,-0.380249,-0.566711,0.730865,0.022156,0.932739,0.359741,0.00824,0.996552,-0.082306,0.956635,-0.065338,-0.283722,-0.743561,0.008209,0.668579,-0.859589,-0.509674,0.035767,-0.852234,0.363678,
00193 -0.375977,-0.201965,-0.970795,-0.12915,0.313477,0.947327,0.06546,-0.254028,-0.528259,0.81015,0.628052,0.601105,0.49411,-0.494385,0.868378,0.037933,0.275635,-0.086426,0.957336,-0.197937,0.468903,-0.860748,0.895599,0.399384,0.195801,0.560791,0.825012,-0.069214,0.304199,-0.849487,0.43103,0.096375,
00194 0.93576,0.339111,-0.051422,0.408966,-0.911072,0.330444,0.942841,-0.042389,-0.452362,-0.786407,0.420563,0.134308,-0.933472,-0.332489,0.80191,-0.566711,-0.188934,-0.987946,-0.105988,0.112518,-0.24408,0.892242,-0.379791,-0.920502,0.229095,-0.316376,0.7789,0.325958,0.535706,-0.912872,0.185211,-0.36377,
00195 -0.184784,0.565369,-0.803833,-0.018463,0.119537,0.992615,-0.259247,-0.935608,0.239532,-0.82373,-0.449127,-0.345947,-0.433105,0.659515,0.614349,-0.822754,0.378845,-0.423676,0.687195,-0.674835,-0.26889,-0.246582,-0.800842,0.545715,-0.729187,-0.207794,0.651978,0.653534,-0.610443,-0.447388,0.492584,-0.023346,
00196 0.869934,0.609039,0.009094,-0.79306,0.962494,-0.271088,-0.00885,0.2659,-0.004913,0.963959,0.651245,0.553619,-0.518951,0.280548,-0.84314,0.458618,-0.175293,-0.983215,0.049805,0.035339,-0.979919,0.196045,-0.982941,0.164307,-0.082245,0.233734,-0.97226,-0.005005,-0.747253,-0.611328,0.260437,0.645599,
00197 0.592773,0.481384,0.117706,-0.949524,-0.29068,-0.535004,-0.791901,-0.294312,-0.627167,-0.214447,0.748718,-0.047974,-0.813477,-0.57959,-0.175537,0.477264,-0.860992,0.738556,-0.414246,-0.53183,0.562561,-0.704071,0.433289,-0.754944,0.64801,-0.100586,0.114716,0.044525,-0.992371,0.966003,0.244873,-0.082764,
00198 };
00199
00200
00201
00202
00203
00204 #define lerp(t, a, b) ((a)+(t)*((b)-(a)))
00205 #define npfade(t) ((t)*(t)*(t)*((t)*((t)*6-15)+10))
00206
00207 static float grad(int hash, float x, float y, float z)
00208 {
00209 int h = hash & 15;
00210 float u = h<8 ? x : y,
00211 v = h<4 ? y : h==12||h==14 ? x : z;
00212 return ((h&1) == 0 ? u : -u) + ((h&2) == 0 ? v : -v);
00213 }
00214
00215
00216 static float newPerlin(float x, float y, float z)
00217 {
00218 int A, AA, AB, B, BA, BB;
00219 float u=floor(x), v=floor(y), w=floor(z);
00220 int X=((int)u) & 255, Y=((int)v) & 255, Z=((int)w) & 255;
00221 x -= u;
00222 y -= v;
00223 z -= w;
00224 u = npfade(x);
00225 v = npfade(y);
00226 w = npfade(z);
00227 A = hash[X ]+Y; AA = hash[A]+Z; AB = hash[A+1]+Z;
00228 B = hash[X+1]+Y; BA = hash[B]+Z; BB = hash[B+1]+Z;
00229 return lerp(w, lerp(v, lerp(u, grad(hash[AA ], x , y , z ),
00230 grad(hash[BA ], x-1, y , z )),
00231 lerp(u, grad(hash[AB ], x , y-1, z ),
00232 grad(hash[BB ], x-1, y-1, z ))),
00233 lerp(v, lerp(u, grad(hash[AA+1], x , y , z-1 ),
00234 grad(hash[BA+1], x-1, y , z-1 )),
00235 lerp(u, grad(hash[AB+1], x , y-1, z-1 ),
00236 grad(hash[BB+1], x-1, y-1, z-1 ))));
00237 }
00238
00239
00240 static float newPerlinU(float x, float y, float z)
00241 {
00242 return (0.5+0.5*newPerlin(x, y, z));
00243 }
00244
00245
00246
00247
00248
00249
00250
00251 static float orgBlenderNoise(float x, float y, float z)
00252 {
00253 register float cn1, cn2, cn3, cn4, cn5, cn6, i, *h;
00254 float ox, oy, oz, jx, jy, jz;
00255 float n= 0.5;
00256 int ix, iy, iz, b00, b01, b10, b11, b20, b21;
00257
00258 ox= (x- (ix= (int)floor(x)) );
00259 oy= (y- (iy= (int)floor(y)) );
00260 oz= (z- (iz= (int)floor(z)) );
00261
00262 jx= ox-1;
00263 jy= oy-1;
00264 jz= oz-1;
00265
00266 cn1=ox*ox; cn2=oy*oy; cn3=oz*oz;
00267 cn4=jx*jx; cn5=jy*jy; cn6=jz*jz;
00268
00269 cn1= 1.0-3.0*cn1+2.0*cn1*ox;
00270 cn2= 1.0-3.0*cn2+2.0*cn2*oy;
00271 cn3= 1.0-3.0*cn3+2.0*cn3*oz;
00272 cn4= 1.0-3.0*cn4-2.0*cn4*jx;
00273 cn5= 1.0-3.0*cn5-2.0*cn5*jy;
00274 cn6= 1.0-3.0*cn6-2.0*cn6*jz;
00275
00276 b00= hash[ hash[ix & 255]+(iy & 255)];
00277 b10= hash[ hash[(ix+1) & 255]+(iy & 255)];
00278 b01= hash[ hash[ix & 255]+((iy+1) & 255)];
00279 b11= hash[ hash[(ix+1) & 255]+((iy+1) & 255)];
00280
00281 b20=iz & 255; b21= (iz+1) & 255;
00282
00283
00284 i= (cn1*cn2*cn3);
00285 h=hashvectf+ 3*hash[b20+b00];
00286 n+= i*(h[0]*ox+h[1]*oy+h[2]*oz);
00287
00288 i= (cn1*cn2*cn6);
00289 h=hashvectf+ 3*hash[b21+b00];
00290 n+= i*(h[0]*ox+h[1]*oy+h[2]*jz);
00291
00292 i= (cn1*cn5*cn3);
00293 h=hashvectf+ 3*hash[b20+b01];
00294 n+= i*(h[0]*ox+h[1]*jy+h[2]*oz);
00295
00296 i= (cn1*cn5*cn6);
00297 h=hashvectf+ 3*hash[b21+b01];
00298 n+= i*(h[0]*ox+h[1]*jy+h[2]*jz);
00299
00300 i= cn4*cn2*cn3;
00301 h=hashvectf+ 3*hash[b20+b10];
00302 n+= i*(h[0]*jx+h[1]*oy+h[2]*oz);
00303
00304 i= cn4*cn2*cn6;
00305 h=hashvectf+ 3*hash[b21+b10];
00306 n+= i*(h[0]*jx+h[1]*oy+h[2]*jz);
00307
00308 i= cn4*cn5*cn3;
00309 h=hashvectf+ 3*hash[b20+b11];
00310 n+= i*(h[0]*jx+h[1]*jy+h[2]*oz);
00311
00312 i= (cn4*cn5*cn6);
00313 h=hashvectf+ 3*hash[b21+b11];
00314 n+= i*(h[0]*jx+h[1]*jy+h[2]*jz);
00315
00316 if(n<0.0) n=0.0; else if(n>1.0) n=1.0;
00317 return n;
00318 }
00319
00320
00321 static float orgBlenderNoiseS(float x, float y, float z)
00322 {
00323 return (2.0*orgBlenderNoise(x, y, z)-1.0);
00324 }
00325
00326
00327 float BLI_hnoise(float noisesize, float x, float y, float z)
00328 {
00329 if(noisesize==0.0) return 0.0;
00330 x= (1.0+x)/noisesize;
00331 y= (1.0+y)/noisesize;
00332 z= (1.0+z)/noisesize;
00333 return orgBlenderNoise(x, y, z);
00334 }
00335
00336
00337
00338 float BLI_turbulence(float noisesize, float x, float y, float z, int nr)
00339 {
00340 float s, d= 0.5, div=1.0;
00341
00342 s= BLI_hnoise(noisesize, x, y, z);
00343
00344 while(nr>0) {
00345
00346 s+= d*BLI_hnoise(noisesize*d, x, y, z);
00347 div+= d;
00348 d*= 0.5;
00349
00350 nr--;
00351 }
00352 return s/div;
00353 }
00354
00355 float BLI_turbulence1(float noisesize, float x, float y, float z, int nr)
00356 {
00357 float s, d= 0.5, div=1.0;
00358
00359 s= fabs( (-1.0+2.0*BLI_hnoise(noisesize, x, y, z)));
00360
00361 while(nr>0) {
00362
00363 s+= fabs(d* (-1.0+2.0*BLI_hnoise(noisesize*d, x, y, z)));
00364 div+= d;
00365 d*= 0.5;
00366
00367 nr--;
00368 }
00369 return s/div;
00370 }
00371
00372
00373
00374 static unsigned char p[512+2]= {
00375 0xA2,0xA0,0x19,0x3B,0xF8,0xEB,0xAA,0xEE,0xF3,0x1C,0x67,0x28,0x1D,0xED,0x0,0xDE,0x95,0x2E,0xDC,0x3F,0x3A,0x82,0x35,0x4D,0x6C,0xBA,0x36,0xD0,0xF6,0xC,0x79,0x32,0xD1,0x59,0xF4,0x8,0x8B,0x63,0x89,0x2F,0xB8,0xB4,0x97,0x83,0xF2,0x8F,0x18,0xC7,0x51,0x14,0x65,0x87,0x48,0x20,0x42,0xA8,0x80,0xB5,0x40,0x13,0xB2,0x22,0x7E,0x57,
00376 0xBC,0x7F,0x6B,0x9D,0x86,0x4C,0xC8,0xDB,0x7C,0xD5,0x25,0x4E,0x5A,0x55,0x74,0x50,0xCD,0xB3,0x7A,0xBB,0xC3,0xCB,0xB6,0xE2,0xE4,0xEC,0xFD,0x98,0xB,0x96,0xD3,0x9E,0x5C,0xA1,0x64,0xF1,0x81,0x61,0xE1,0xC4,0x24,0x72,0x49,0x8C,0x90,0x4B,0x84,0x34,0x38,0xAB,0x78,0xCA,0x1F,0x1,0xD7,0x93,0x11,0xC1,0x58,0xA9,0x31,0xF9,0x44,0x6D,
00377 0xBF,0x33,0x9C,0x5F,0x9,0x94,0xA3,0x85,0x6,0xC6,0x9A,0x1E,0x7B,0x46,0x15,0x30,0x27,0x2B,0x1B,0x71,0x3C,0x5B,0xD6,0x6F,0x62,0xAC,0x4F,0xC2,0xC0,0xE,0xB1,0x23,0xA7,0xDF,0x47,0xB0,0x77,0x69,0x5,0xE9,0xE6,0xE7,0x76,0x73,0xF,0xFE,0x6E,0x9B,0x56,0xEF,0x12,0xA5,0x37,0xFC,0xAE,0xD9,0x3,0x8E,0xDD,0x10,0xB9,0xCE,0xC9,0x8D,
00378 0xDA,0x2A,0xBD,0x68,0x17,0x9F,0xBE,0xD4,0xA,0xCC,0xD2,0xE8,0x43,0x3D,0x70,0xB7,0x2,0x7D,0x99,0xD8,0xD,0x60,0x8A,0x4,0x2C,0x3E,0x92,0xE5,0xAF,0x53,0x7,0xE0,0x29,0xA6,0xC5,0xE3,0xF5,0xF7,0x4A,0x41,0x26,0x6A,0x16,0x5E,0x52,0x2D,0x21,0xAD,0xF0,0x91,0xFF,0xEA,0x54,0xFA,0x66,0x1A,0x45,0x39,0xCF,0x75,0xA4,0x88,0xFB,0x5D,
00379 0xA2,0xA0,0x19,0x3B,0xF8,0xEB,0xAA,0xEE,0xF3,0x1C,0x67,0x28,0x1D,0xED,0x0,0xDE,0x95,0x2E,0xDC,0x3F,0x3A,0x82,0x35,0x4D,0x6C,0xBA,0x36,0xD0,0xF6,0xC,0x79,0x32,0xD1,0x59,0xF4,0x8,0x8B,0x63,0x89,0x2F,0xB8,0xB4,0x97,0x83,0xF2,0x8F,0x18,0xC7,0x51,0x14,0x65,0x87,0x48,0x20,0x42,0xA8,0x80,0xB5,0x40,0x13,0xB2,0x22,0x7E,0x57,
00380 0xBC,0x7F,0x6B,0x9D,0x86,0x4C,0xC8,0xDB,0x7C,0xD5,0x25,0x4E,0x5A,0x55,0x74,0x50,0xCD,0xB3,0x7A,0xBB,0xC3,0xCB,0xB6,0xE2,0xE4,0xEC,0xFD,0x98,0xB,0x96,0xD3,0x9E,0x5C,0xA1,0x64,0xF1,0x81,0x61,0xE1,0xC4,0x24,0x72,0x49,0x8C,0x90,0x4B,0x84,0x34,0x38,0xAB,0x78,0xCA,0x1F,0x1,0xD7,0x93,0x11,0xC1,0x58,0xA9,0x31,0xF9,0x44,0x6D,
00381 0xBF,0x33,0x9C,0x5F,0x9,0x94,0xA3,0x85,0x6,0xC6,0x9A,0x1E,0x7B,0x46,0x15,0x30,0x27,0x2B,0x1B,0x71,0x3C,0x5B,0xD6,0x6F,0x62,0xAC,0x4F,0xC2,0xC0,0xE,0xB1,0x23,0xA7,0xDF,0x47,0xB0,0x77,0x69,0x5,0xE9,0xE6,0xE7,0x76,0x73,0xF,0xFE,0x6E,0x9B,0x56,0xEF,0x12,0xA5,0x37,0xFC,0xAE,0xD9,0x3,0x8E,0xDD,0x10,0xB9,0xCE,0xC9,0x8D,
00382 0xDA,0x2A,0xBD,0x68,0x17,0x9F,0xBE,0xD4,0xA,0xCC,0xD2,0xE8,0x43,0x3D,0x70,0xB7,0x2,0x7D,0x99,0xD8,0xD,0x60,0x8A,0x4,0x2C,0x3E,0x92,0xE5,0xAF,0x53,0x7,0xE0,0x29,0xA6,0xC5,0xE3,0xF5,0xF7,0x4A,0x41,0x26,0x6A,0x16,0x5E,0x52,0x2D,0x21,0xAD,0xF0,0x91,0xFF,0xEA,0x54,0xFA,0x66,0x1A,0x45,0x39,0xCF,0x75,0xA4,0x88,0xFB,0x5D,
00383 0xA2,0xA0};
00384
00385
00386 float g[512+2][3]= {
00387 {0.33783, 0.715698, -0.611206},
00388 {-0.944031, -0.326599, -0.045624},
00389 {-0.101074, -0.416443, -0.903503},
00390 {0.799286, 0.49411, -0.341949},
00391 {-0.854645, 0.518036, 0.033936},
00392 {0.42514, -0.437866, -0.792114},
00393 {-0.358948, 0.597046, 0.717377},
00394 {-0.985413, 0.144714, 0.089294},
00395 {-0.601776, -0.33728, -0.723907},
00396 {-0.449921, 0.594513, 0.666382},
00397 {0.208313, -0.10791, 0.972076},
00398 {0.575317, 0.060425, 0.815643},
00399 {0.293365, -0.875702, -0.383453},
00400 {0.293762, 0.465759, 0.834686},
00401 {-0.846008, -0.233398, -0.47934},
00402 {-0.115814, 0.143036, -0.98291},
00403 {0.204681, -0.949036, -0.239532},
00404 {0.946716, -0.263947, 0.184326},
00405 {-0.235596, 0.573822, 0.784332},
00406 {0.203705, -0.372253, -0.905487},
00407 {0.756989, -0.651031, 0.055298},
00408 {0.497803, 0.814697, -0.297363},
00409 {-0.16214, 0.063995, -0.98468},
00410 {-0.329254, 0.834381, 0.441925},
00411 {0.703827, -0.527039, -0.476227},
00412 {0.956421, 0.266113, 0.119781},
00413 {0.480133, 0.482849, 0.7323},
00414 {-0.18631, 0.961212, -0.203125},
00415 {-0.748474, -0.656921, -0.090393},
00416 {-0.085052, -0.165253, 0.982544},
00417 {-0.76947, 0.628174, -0.115234},
00418 {0.383148, 0.537659, 0.751068},
00419 {0.616486, -0.668488, -0.415924},
00420 {-0.259979, -0.630005, 0.73175},
00421 {0.570953, -0.087952, 0.816223},
00422 {-0.458008, 0.023254, 0.888611},
00423 {-0.196167, 0.976563, -0.088287},
00424 {-0.263885, -0.69812, -0.665527},
00425 {0.437134, -0.892273, -0.112793},
00426 {-0.621674, -0.230438, 0.748566},
00427 {0.232422, 0.900574, -0.367249},
00428 {0.22229, -0.796143, 0.562744},
00429 {-0.665497, -0.73764, 0.11377},
00430 {0.670135, 0.704803, 0.232605},
00431 {0.895599, 0.429749, -0.114655},
00432 {-0.11557, -0.474243, 0.872742},
00433 {0.621826, 0.604004, -0.498444},
00434 {-0.832214, 0.012756, 0.55426},
00435 {-0.702484, 0.705994, -0.089661},
00436 {-0.692017, 0.649292, 0.315399},
00437 {-0.175995, -0.977997, 0.111877},
00438 {0.096954, -0.04953, 0.994019},
00439 {0.635284, -0.606689, -0.477783},
00440 {-0.261261, -0.607422, -0.750153},
00441 {0.983276, 0.165436, 0.075958},
00442 {-0.29837, 0.404083, -0.864655},
00443 {-0.638672, 0.507721, 0.578156},
00444 {0.388214, 0.412079, 0.824249},
00445 {0.556183, -0.208832, 0.804352},
00446 {0.778442, 0.562012, 0.27951},
00447 {-0.616577, 0.781921, -0.091522},
00448 {0.196289, 0.051056, 0.979187},
00449 {-0.121216, 0.207153, -0.970734},
00450 {-0.173401, -0.384735, 0.906555},
00451 {0.161499, -0.723236, -0.671387},
00452 {0.178497, -0.006226, -0.983887},
00453 {-0.126038, 0.15799, 0.97934},
00454 {0.830475, -0.024811, 0.556458},
00455 {-0.510132, -0.76944, 0.384247},
00456 {0.81424, 0.200104, -0.544891},
00457 {-0.112549, -0.393311, -0.912445},
00458 {0.56189, 0.152222, -0.813049},
00459 {0.198914, -0.254517, -0.946381},
00460 {-0.41217, 0.690979, -0.593811},
00461 {-0.407257, 0.324524, 0.853668},
00462 {-0.690186, 0.366119, -0.624115},
00463 {-0.428345, 0.844147, -0.322296},
00464 {-0.21228, -0.297546, -0.930756},
00465 {-0.273071, 0.516113, 0.811798},
00466 {0.928314, 0.371643, 0.007233},
00467 {0.785828, -0.479218, -0.390778},
00468 {-0.704895, 0.058929, 0.706818},
00469 {0.173248, 0.203583, 0.963562},
00470 {0.422211, -0.904297, -0.062469},
00471 {-0.363312, -0.182465, 0.913605},
00472 {0.254028, -0.552307, -0.793945},
00473 {-0.28891, -0.765747, -0.574554},
00474 {0.058319, 0.291382, 0.954803},
00475 {0.946136, -0.303925, 0.111267},
00476 {-0.078156, 0.443695, -0.892731},
00477 {0.182098, 0.89389, 0.409515},
00478 {-0.680298, -0.213318, 0.701141},
00479 {0.062469, 0.848389, -0.525635},
00480 {-0.72879, -0.641846, 0.238342},
00481 {-0.88089, 0.427673, 0.202637},
00482 {-0.532501, -0.21405, 0.818878},
00483 {0.948975, -0.305084, 0.07962},
00484 {0.925446, 0.374664, 0.055817},
00485 {0.820923, 0.565491, 0.079102},
00486 {0.25882, 0.099792, -0.960724},
00487 {-0.294617, 0.910522, 0.289978},
00488 {0.137115, 0.320038, -0.937408},
00489 {-0.908386, 0.345276, -0.235718},
00490 {-0.936218, 0.138763, 0.322754},
00491 {0.366577, 0.925934, -0.090637},
00492 {0.309296, -0.686829, -0.657684},
00493 {0.66983, 0.024445, 0.742065},
00494 {-0.917999, -0.059113, -0.392059},
00495 {0.365509, 0.462158, -0.807922},
00496 {0.083374, 0.996399, -0.014801},
00497 {0.593842, 0.253143, -0.763672},
00498 {0.974976, -0.165466, 0.148285},
00499 {0.918976, 0.137299, 0.369537},
00500 {0.294952, 0.694977, 0.655731},
00501 {0.943085, 0.152618, -0.295319},
00502 {0.58783, -0.598236, 0.544495},
00503 {0.203796, 0.678223, 0.705994},
00504 {-0.478821, -0.661011, 0.577667},
00505 {0.719055, -0.1698, -0.673828},
00506 {-0.132172, -0.965332, 0.225006},
00507 {-0.981873, -0.14502, 0.121979},
00508 {0.763458, 0.579742, 0.284546},
00509 {-0.893188, 0.079681, 0.442474},
00510 {-0.795776, -0.523804, 0.303802},
00511 {0.734955, 0.67804, -0.007446},
00512 {0.15506, 0.986267, -0.056183},
00513 {0.258026, 0.571503, -0.778931},
00514 {-0.681549, -0.702087, -0.206116},
00515 {-0.96286, -0.177185, 0.203613},
00516 {-0.470978, -0.515106, 0.716095},
00517 {-0.740326, 0.57135, 0.354095},
00518 {-0.56012, -0.824982, -0.074982},
00519 {-0.507874, 0.753204, 0.417969},
00520 {-0.503113, 0.038147, 0.863342},
00521 {0.594025, 0.673553, -0.439758},
00522 {-0.119873, -0.005524, -0.992737},
00523 {0.098267, -0.213776, 0.971893},
00524 {-0.615631, 0.643951, 0.454163},
00525 {0.896851, -0.441071, 0.032166},
00526 {-0.555023, 0.750763, -0.358093},
00527 {0.398773, 0.304688, 0.864929},
00528 {-0.722961, 0.303589, 0.620544},
00529 {-0.63559, -0.621948, -0.457306},
00530 {-0.293243, 0.072327, 0.953278},
00531 {-0.491638, 0.661041, -0.566772},
00532 {-0.304199, -0.572083, -0.761688},
00533 {0.908081, -0.398956, 0.127014},
00534 {-0.523621, -0.549683, -0.650848},
00535 {-0.932922, -0.19986, 0.299408},
00536 {0.099426, 0.140869, 0.984985},
00537 {-0.020325, -0.999756, -0.002319},
00538 {0.952667, 0.280853, -0.11615},
00539 {-0.971893, 0.082581, 0.220337},
00540 {0.65921, 0.705292, -0.260651},
00541 {0.733063, -0.175537, 0.657043},
00542 {-0.555206, 0.429504, -0.712189},
00543 {0.400421, -0.89859, 0.179352},
00544 {0.750885, -0.19696, 0.630341},
00545 {0.785675, -0.569336, 0.241821},
00546 {-0.058899, -0.464111, 0.883789},
00547 {0.129608, -0.94519, 0.299622},
00548 {-0.357819, 0.907654, 0.219238},
00549 {-0.842133, -0.439117, -0.312927},
00550 {-0.313477, 0.84433, 0.434479},
00551 {-0.241211, 0.053253, 0.968994},
00552 {0.063873, 0.823273, 0.563965},
00553 {0.476288, 0.862152, -0.172516},
00554 {0.620941, -0.298126, 0.724915},
00555 {0.25238, -0.749359, -0.612122},
00556 {-0.577545, 0.386566, 0.718994},
00557 {-0.406342, -0.737976, 0.538696},
00558 {0.04718, 0.556305, 0.82959},
00559 {-0.802856, 0.587463, 0.101166},
00560 {-0.707733, -0.705963, 0.026428},
00561 {0.374908, 0.68457, 0.625092},
00562 {0.472137, 0.208405, -0.856506},
00563 {-0.703064, -0.581085, -0.409821},
00564 {-0.417206, -0.736328, 0.532623},
00565 {-0.447876, -0.20285, -0.870728},
00566 {0.086945, -0.990417, 0.107086},
00567 {0.183685, 0.018341, -0.982788},
00568 {0.560638, -0.428864, 0.708282},
00569 {0.296722, -0.952576, -0.0672},
00570 {0.135773, 0.990265, 0.030243},
00571 {-0.068787, 0.654724, 0.752686},
00572 {0.762604, -0.551758, 0.337585},
00573 {-0.819611, -0.407684, 0.402466},
00574 {-0.727844, -0.55072, -0.408539},
00575 {-0.855774, -0.480011, 0.19281},
00576 {0.693176, -0.079285, 0.716339},
00577 {0.226013, 0.650116, -0.725433},
00578 {0.246704, 0.953369, -0.173553},
00579 {-0.970398, -0.239227, -0.03244},
00580 {0.136383, -0.394318, 0.908752},
00581 {0.813232, 0.558167, 0.164368},
00582 {0.40451, 0.549042, -0.731323},
00583 {-0.380249, -0.566711, 0.730865},
00584 {0.022156, 0.932739, 0.359741},
00585 {0.00824, 0.996552, -0.082306},
00586 {0.956635, -0.065338, -0.283722},
00587 {-0.743561, 0.008209, 0.668579},
00588 {-0.859589, -0.509674, 0.035767},
00589 {-0.852234, 0.363678, -0.375977},
00590 {-0.201965, -0.970795, -0.12915},
00591 {0.313477, 0.947327, 0.06546},
00592 {-0.254028, -0.528259, 0.81015},
00593 {0.628052, 0.601105, 0.49411},
00594 {-0.494385, 0.868378, 0.037933},
00595 {0.275635, -0.086426, 0.957336},
00596 {-0.197937, 0.468903, -0.860748},
00597 {0.895599, 0.399384, 0.195801},
00598 {0.560791, 0.825012, -0.069214},
00599 {0.304199, -0.849487, 0.43103},
00600 {0.096375, 0.93576, 0.339111},
00601 {-0.051422, 0.408966, -0.911072},
00602 {0.330444, 0.942841, -0.042389},
00603 {-0.452362, -0.786407, 0.420563},
00604 {0.134308, -0.933472, -0.332489},
00605 {0.80191, -0.566711, -0.188934},
00606 {-0.987946, -0.105988, 0.112518},
00607 {-0.24408, 0.892242, -0.379791},
00608 {-0.920502, 0.229095, -0.316376},
00609 {0.7789, 0.325958, 0.535706},
00610 {-0.912872, 0.185211, -0.36377},
00611 {-0.184784, 0.565369, -0.803833},
00612 {-0.018463, 0.119537, 0.992615},
00613 {-0.259247, -0.935608, 0.239532},
00614 {-0.82373, -0.449127, -0.345947},
00615 {-0.433105, 0.659515, 0.614349},
00616 {-0.822754, 0.378845, -0.423676},
00617 {0.687195, -0.674835, -0.26889},
00618 {-0.246582, -0.800842, 0.545715},
00619 {-0.729187, -0.207794, 0.651978},
00620 {0.653534, -0.610443, -0.447388},
00621 {0.492584, -0.023346, 0.869934},
00622 {0.609039, 0.009094, -0.79306},
00623 {0.962494, -0.271088, -0.00885},
00624 {0.2659, -0.004913, 0.963959},
00625 {0.651245, 0.553619, -0.518951},
00626 {0.280548, -0.84314, 0.458618},
00627 {-0.175293, -0.983215, 0.049805},
00628 {0.035339, -0.979919, 0.196045},
00629 {-0.982941, 0.164307, -0.082245},
00630 {0.233734, -0.97226, -0.005005},
00631 {-0.747253, -0.611328, 0.260437},
00632 {0.645599, 0.592773, 0.481384},
00633 {0.117706, -0.949524, -0.29068},
00634 {-0.535004, -0.791901, -0.294312},
00635 {-0.627167, -0.214447, 0.748718},
00636 {-0.047974, -0.813477, -0.57959},
00637 {-0.175537, 0.477264, -0.860992},
00638 {0.738556, -0.414246, -0.53183},
00639 {0.562561, -0.704071, 0.433289},
00640 {-0.754944, 0.64801, -0.100586},
00641 {0.114716, 0.044525, -0.992371},
00642 {0.966003, 0.244873, -0.082764},
00643 {0.33783, 0.715698, -0.611206},
00644 {-0.944031, -0.326599, -0.045624},
00645 {-0.101074, -0.416443, -0.903503},
00646 {0.799286, 0.49411, -0.341949},
00647 {-0.854645, 0.518036, 0.033936},
00648 {0.42514, -0.437866, -0.792114},
00649 {-0.358948, 0.597046, 0.717377},
00650 {-0.985413, 0.144714, 0.089294},
00651 {-0.601776, -0.33728, -0.723907},
00652 {-0.449921, 0.594513, 0.666382},
00653 {0.208313, -0.10791, 0.972076},
00654 {0.575317, 0.060425, 0.815643},
00655 {0.293365, -0.875702, -0.383453},
00656 {0.293762, 0.465759, 0.834686},
00657 {-0.846008, -0.233398, -0.47934},
00658 {-0.115814, 0.143036, -0.98291},
00659 {0.204681, -0.949036, -0.239532},
00660 {0.946716, -0.263947, 0.184326},
00661 {-0.235596, 0.573822, 0.784332},
00662 {0.203705, -0.372253, -0.905487},
00663 {0.756989, -0.651031, 0.055298},
00664 {0.497803, 0.814697, -0.297363},
00665 {-0.16214, 0.063995, -0.98468},
00666 {-0.329254, 0.834381, 0.441925},
00667 {0.703827, -0.527039, -0.476227},
00668 {0.956421, 0.266113, 0.119781},
00669 {0.480133, 0.482849, 0.7323},
00670 {-0.18631, 0.961212, -0.203125},
00671 {-0.748474, -0.656921, -0.090393},
00672 {-0.085052, -0.165253, 0.982544},
00673 {-0.76947, 0.628174, -0.115234},
00674 {0.383148, 0.537659, 0.751068},
00675 {0.616486, -0.668488, -0.415924},
00676 {-0.259979, -0.630005, 0.73175},
00677 {0.570953, -0.087952, 0.816223},
00678 {-0.458008, 0.023254, 0.888611},
00679 {-0.196167, 0.976563, -0.088287},
00680 {-0.263885, -0.69812, -0.665527},
00681 {0.437134, -0.892273, -0.112793},
00682 {-0.621674, -0.230438, 0.748566},
00683 {0.232422, 0.900574, -0.367249},
00684 {0.22229, -0.796143, 0.562744},
00685 {-0.665497, -0.73764, 0.11377},
00686 {0.670135, 0.704803, 0.232605},
00687 {0.895599, 0.429749, -0.114655},
00688 {-0.11557, -0.474243, 0.872742},
00689 {0.621826, 0.604004, -0.498444},
00690 {-0.832214, 0.012756, 0.55426},
00691 {-0.702484, 0.705994, -0.089661},
00692 {-0.692017, 0.649292, 0.315399},
00693 {-0.175995, -0.977997, 0.111877},
00694 {0.096954, -0.04953, 0.994019},
00695 {0.635284, -0.606689, -0.477783},
00696 {-0.261261, -0.607422, -0.750153},
00697 {0.983276, 0.165436, 0.075958},
00698 {-0.29837, 0.404083, -0.864655},
00699 {-0.638672, 0.507721, 0.578156},
00700 {0.388214, 0.412079, 0.824249},
00701 {0.556183, -0.208832, 0.804352},
00702 {0.778442, 0.562012, 0.27951},
00703 {-0.616577, 0.781921, -0.091522},
00704 {0.196289, 0.051056, 0.979187},
00705 {-0.121216, 0.207153, -0.970734},
00706 {-0.173401, -0.384735, 0.906555},
00707 {0.161499, -0.723236, -0.671387},
00708 {0.178497, -0.006226, -0.983887},
00709 {-0.126038, 0.15799, 0.97934},
00710 {0.830475, -0.024811, 0.556458},
00711 {-0.510132, -0.76944, 0.384247},
00712 {0.81424, 0.200104, -0.544891},
00713 {-0.112549, -0.393311, -0.912445},
00714 {0.56189, 0.152222, -0.813049},
00715 {0.198914, -0.254517, -0.946381},
00716 {-0.41217, 0.690979, -0.593811},
00717 {-0.407257, 0.324524, 0.853668},
00718 {-0.690186, 0.366119, -0.624115},
00719 {-0.428345, 0.844147, -0.322296},
00720 {-0.21228, -0.297546, -0.930756},
00721 {-0.273071, 0.516113, 0.811798},
00722 {0.928314, 0.371643, 0.007233},
00723 {0.785828, -0.479218, -0.390778},
00724 {-0.704895, 0.058929, 0.706818},
00725 {0.173248, 0.203583, 0.963562},
00726 {0.422211, -0.904297, -0.062469},
00727 {-0.363312, -0.182465, 0.913605},
00728 {0.254028, -0.552307, -0.793945},
00729 {-0.28891, -0.765747, -0.574554},
00730 {0.058319, 0.291382, 0.954803},
00731 {0.946136, -0.303925, 0.111267},
00732 {-0.078156, 0.443695, -0.892731},
00733 {0.182098, 0.89389, 0.409515},
00734 {-0.680298, -0.213318, 0.701141},
00735 {0.062469, 0.848389, -0.525635},
00736 {-0.72879, -0.641846, 0.238342},
00737 {-0.88089, 0.427673, 0.202637},
00738 {-0.532501, -0.21405, 0.818878},
00739 {0.948975, -0.305084, 0.07962},
00740 {0.925446, 0.374664, 0.055817},
00741 {0.820923, 0.565491, 0.079102},
00742 {0.25882, 0.099792, -0.960724},
00743 {-0.294617, 0.910522, 0.289978},
00744 {0.137115, 0.320038, -0.937408},
00745 {-0.908386, 0.345276, -0.235718},
00746 {-0.936218, 0.138763, 0.322754},
00747 {0.366577, 0.925934, -0.090637},
00748 {0.309296, -0.686829, -0.657684},
00749 {0.66983, 0.024445, 0.742065},
00750 {-0.917999, -0.059113, -0.392059},
00751 {0.365509, 0.462158, -0.807922},
00752 {0.083374, 0.996399, -0.014801},
00753 {0.593842, 0.253143, -0.763672},
00754 {0.974976, -0.165466, 0.148285},
00755 {0.918976, 0.137299, 0.369537},
00756 {0.294952, 0.694977, 0.655731},
00757 {0.943085, 0.152618, -0.295319},
00758 {0.58783, -0.598236, 0.544495},
00759 {0.203796, 0.678223, 0.705994},
00760 {-0.478821, -0.661011, 0.577667},
00761 {0.719055, -0.1698, -0.673828},
00762 {-0.132172, -0.965332, 0.225006},
00763 {-0.981873, -0.14502, 0.121979},
00764 {0.763458, 0.579742, 0.284546},
00765 {-0.893188, 0.079681, 0.442474},
00766 {-0.795776, -0.523804, 0.303802},
00767 {0.734955, 0.67804, -0.007446},
00768 {0.15506, 0.986267, -0.056183},
00769 {0.258026, 0.571503, -0.778931},
00770 {-0.681549, -0.702087, -0.206116},
00771 {-0.96286, -0.177185, 0.203613},
00772 {-0.470978, -0.515106, 0.716095},
00773 {-0.740326, 0.57135, 0.354095},
00774 {-0.56012, -0.824982, -0.074982},
00775 {-0.507874, 0.753204, 0.417969},
00776 {-0.503113, 0.038147, 0.863342},
00777 {0.594025, 0.673553, -0.439758},
00778 {-0.119873, -0.005524, -0.992737},
00779 {0.098267, -0.213776, 0.971893},
00780 {-0.615631, 0.643951, 0.454163},
00781 {0.896851, -0.441071, 0.032166},
00782 {-0.555023, 0.750763, -0.358093},
00783 {0.398773, 0.304688, 0.864929},
00784 {-0.722961, 0.303589, 0.620544},
00785 {-0.63559, -0.621948, -0.457306},
00786 {-0.293243, 0.072327, 0.953278},
00787 {-0.491638, 0.661041, -0.566772},
00788 {-0.304199, -0.572083, -0.761688},
00789 {0.908081, -0.398956, 0.127014},
00790 {-0.523621, -0.549683, -0.650848},
00791 {-0.932922, -0.19986, 0.299408},
00792 {0.099426, 0.140869, 0.984985},
00793 {-0.020325, -0.999756, -0.002319},
00794 {0.952667, 0.280853, -0.11615},
00795 {-0.971893, 0.082581, 0.220337},
00796 {0.65921, 0.705292, -0.260651},
00797 {0.733063, -0.175537, 0.657043},
00798 {-0.555206, 0.429504, -0.712189},
00799 {0.400421, -0.89859, 0.179352},
00800 {0.750885, -0.19696, 0.630341},
00801 {0.785675, -0.569336, 0.241821},
00802 {-0.058899, -0.464111, 0.883789},
00803 {0.129608, -0.94519, 0.299622},
00804 {-0.357819, 0.907654, 0.219238},
00805 {-0.842133, -0.439117, -0.312927},
00806 {-0.313477, 0.84433, 0.434479},
00807 {-0.241211, 0.053253, 0.968994},
00808 {0.063873, 0.823273, 0.563965},
00809 {0.476288, 0.862152, -0.172516},
00810 {0.620941, -0.298126, 0.724915},
00811 {0.25238, -0.749359, -0.612122},
00812 {-0.577545, 0.386566, 0.718994},
00813 {-0.406342, -0.737976, 0.538696},
00814 {0.04718, 0.556305, 0.82959},
00815 {-0.802856, 0.587463, 0.101166},
00816 {-0.707733, -0.705963, 0.026428},
00817 {0.374908, 0.68457, 0.625092},
00818 {0.472137, 0.208405, -0.856506},
00819 {-0.703064, -0.581085, -0.409821},
00820 {-0.417206, -0.736328, 0.532623},
00821 {-0.447876, -0.20285, -0.870728},
00822 {0.086945, -0.990417, 0.107086},
00823 {0.183685, 0.018341, -0.982788},
00824 {0.560638, -0.428864, 0.708282},
00825 {0.296722, -0.952576, -0.0672},
00826 {0.135773, 0.990265, 0.030243},
00827 {-0.068787, 0.654724, 0.752686},
00828 {0.762604, -0.551758, 0.337585},
00829 {-0.819611, -0.407684, 0.402466},
00830 {-0.727844, -0.55072, -0.408539},
00831 {-0.855774, -0.480011, 0.19281},
00832 {0.693176, -0.079285, 0.716339},
00833 {0.226013, 0.650116, -0.725433},
00834 {0.246704, 0.953369, -0.173553},
00835 {-0.970398, -0.239227, -0.03244},
00836 {0.136383, -0.394318, 0.908752},
00837 {0.813232, 0.558167, 0.164368},
00838 {0.40451, 0.549042, -0.731323},
00839 {-0.380249, -0.566711, 0.730865},
00840 {0.022156, 0.932739, 0.359741},
00841 {0.00824, 0.996552, -0.082306},
00842 {0.956635, -0.065338, -0.283722},
00843 {-0.743561, 0.008209, 0.668579},
00844 {-0.859589, -0.509674, 0.035767},
00845 {-0.852234, 0.363678, -0.375977},
00846 {-0.201965, -0.970795, -0.12915},
00847 {0.313477, 0.947327, 0.06546},
00848 {-0.254028, -0.528259, 0.81015},
00849 {0.628052, 0.601105, 0.49411},
00850 {-0.494385, 0.868378, 0.037933},
00851 {0.275635, -0.086426, 0.957336},
00852 {-0.197937, 0.468903, -0.860748},
00853 {0.895599, 0.399384, 0.195801},
00854 {0.560791, 0.825012, -0.069214},
00855 {0.304199, -0.849487, 0.43103},
00856 {0.096375, 0.93576, 0.339111},
00857 {-0.051422, 0.408966, -0.911072},
00858 {0.330444, 0.942841, -0.042389},
00859 {-0.452362, -0.786407, 0.420563},
00860 {0.134308, -0.933472, -0.332489},
00861 {0.80191, -0.566711, -0.188934},
00862 {-0.987946, -0.105988, 0.112518},
00863 {-0.24408, 0.892242, -0.379791},
00864 {-0.920502, 0.229095, -0.316376},
00865 {0.7789, 0.325958, 0.535706},
00866 {-0.912872, 0.185211, -0.36377},
00867 {-0.184784, 0.565369, -0.803833},
00868 {-0.018463, 0.119537, 0.992615},
00869 {-0.259247, -0.935608, 0.239532},
00870 {-0.82373, -0.449127, -0.345947},
00871 {-0.433105, 0.659515, 0.614349},
00872 {-0.822754, 0.378845, -0.423676},
00873 {0.687195, -0.674835, -0.26889},
00874 {-0.246582, -0.800842, 0.545715},
00875 {-0.729187, -0.207794, 0.651978},
00876 {0.653534, -0.610443, -0.447388},
00877 {0.492584, -0.023346, 0.869934},
00878 {0.609039, 0.009094, -0.79306},
00879 {0.962494, -0.271088, -0.00885},
00880 {0.2659, -0.004913, 0.963959},
00881 {0.651245, 0.553619, -0.518951},
00882 {0.280548, -0.84314, 0.458618},
00883 {-0.175293, -0.983215, 0.049805},
00884 {0.035339, -0.979919, 0.196045},
00885 {-0.982941, 0.164307, -0.082245},
00886 {0.233734, -0.97226, -0.005005},
00887 {-0.747253, -0.611328, 0.260437},
00888 {0.645599, 0.592773, 0.481384},
00889 {0.117706, -0.949524, -0.29068},
00890 {-0.535004, -0.791901, -0.294312},
00891 {-0.627167, -0.214447, 0.748718},
00892 {-0.047974, -0.813477, -0.57959},
00893 {-0.175537, 0.477264, -0.860992},
00894 {0.738556, -0.414246, -0.53183},
00895 {0.562561, -0.704071, 0.433289},
00896 {-0.754944, 0.64801, -0.100586},
00897 {0.114716, 0.044525, -0.992371},
00898 {0.966003, 0.244873, -0.082764},
00899 {0.33783, 0.715698, -0.611206},
00900 {-0.944031, -0.326599, -0.045624},
00901 };
00902
00903
00904
00905 #define DOT(a,b) (a[0] * b[0] + a[1] * b[1] + a[2] * b[2])
00906
00907 #define setup(i,b0,b1,r0,r1) \
00908 t = vec[i] + 10000.; \
00909 b0 = ((int)t) & 255; \
00910 b1 = (b0+1) & 255; \
00911 r0 = t - (int)t; \
00912 r1 = r0 - 1.;
00913
00914
00915 float noise3_perlin(float vec[3])
00916 {
00917 int bx0, bx1, by0, by1, bz0, bz1, b00, b10, b01, b11;
00918 float rx0, rx1, ry0, ry1, rz0, rz1, *q, sx, sy, sz, a, b, c, d, t, u, v;
00919 register int i, j;
00920
00921
00922 setup(0, bx0,bx1, rx0,rx1);
00923 setup(1, by0,by1, ry0,ry1);
00924 setup(2, bz0,bz1, rz0,rz1);
00925
00926 i = p[ bx0 ];
00927 j = p[ bx1 ];
00928
00929 b00 = p[ i + by0 ];
00930 b10 = p[ j + by0 ];
00931 b01 = p[ i + by1 ];
00932 b11 = p[ j + by1 ];
00933
00934 #define at(rx,ry,rz) ( rx * q[0] + ry * q[1] + rz * q[2] )
00935
00936 #define surve(t) ( t * t * (3. - 2. * t) )
00937
00938
00939
00940 sx = surve(rx0);
00941 sy = surve(ry0);
00942 sz = surve(rz0);
00943
00944
00945 q = g[ b00 + bz0 ] ;
00946 u = at(rx0,ry0,rz0);
00947 q = g[ b10 + bz0 ] ;
00948 v = at(rx1,ry0,rz0);
00949 a = lerp(sx, u, v);
00950
00951 q = g[ b01 + bz0 ] ;
00952 u = at(rx0,ry1,rz0);
00953 q = g[ b11 + bz0 ] ;
00954 v = at(rx1,ry1,rz0);
00955 b = lerp(sx, u, v);
00956
00957 c = lerp(sy, a, b);
00958
00959 q = g[ b00 + bz1 ] ;
00960 u = at(rx0,ry0,rz1);
00961 q = g[ b10 + bz1 ] ;
00962 v = at(rx1,ry0,rz1);
00963 a = lerp(sx, u, v);
00964
00965 q = g[ b01 + bz1 ] ;
00966 u = at(rx0,ry1,rz1);
00967 q = g[ b11 + bz1 ] ;
00968 v = at(rx1,ry1,rz1);
00969 b = lerp(sx, u, v);
00970
00971 d = lerp(sy, a, b);
00972
00973 return 1.5 * lerp(sz, c, d);
00974 }
00975
00976 float turbulence_perlin(float *point, float lofreq, float hifreq)
00977 {
00978 float freq, t, p[3];
00979
00980 p[0] = point[0] + 123.456;
00981 p[1] = point[1];
00982 p[2] = point[2];
00983
00984 t = 0;
00985 for (freq = lofreq ; freq < hifreq ; freq *= 2.) {
00986 t += fabs(noise3_perlin(p)) / freq;
00987 p[0] *= 2.;
00988 p[1] *= 2.;
00989 p[2] *= 2.;
00990 }
00991 return t - 0.3;
00992 }
00993
00994
00995 static float orgPerlinNoise(float x, float y, float z)
00996 {
00997 float v[3];
00998
00999 v[0] = x;
01000 v[1] = y;
01001 v[2] = z;
01002 return noise3_perlin(v);
01003 }
01004
01005
01006 static float orgPerlinNoiseU(float x, float y, float z)
01007 {
01008 float v[3];
01009
01010 v[0] = x;
01011 v[1] = y;
01012 v[2] = z;
01013 return (0.5+0.5*noise3_perlin(v));
01014 }
01015
01016
01017
01018 float BLI_hnoisep(float noisesize, float x, float y, float z)
01019 {
01020 float vec[3];
01021
01022 vec[0]= x/noisesize;
01023 vec[1]= y/noisesize;
01024 vec[2]= z/noisesize;
01025
01026 return noise3_perlin(vec);
01027 }
01028
01029 float turbulencep(float noisesize, float x, float y, float z, int nr)
01030 {
01031 float vec[3];
01032
01033 vec[0]= x/noisesize;
01034 vec[1]= y/noisesize;
01035 vec[2]= z/noisesize;
01036 nr++;
01037 return turbulence_perlin(vec, 1.0, (float)(1<<nr));
01038 }
01039
01040
01041
01042
01043
01044
01045
01046
01047
01048 static float dist_Squared(float x, float y, float z, float e) { return (x*x + y*y + z*z); }
01049
01050 static float dist_Real(float x, float y, float z, float e) { return sqrt(x*x + y*y + z*z); }
01051
01052 static float dist_Manhattan(float x, float y, float z, float e) { return (fabs(x) + fabs(y) + fabs(z)); }
01053
01054 static float dist_Chebychev(float x, float y, float z, float e)
01055 {
01056 float t;
01057 x = fabs(x);
01058 y = fabs(y);
01059 z = fabs(z);
01060 t = (x>y)?x:y;
01061 return ((z>t)?z:t);
01062 }
01063
01064
01065 static float dist_MinkovskyH(float x, float y, float z, float e)
01066 {
01067 float d = sqrt(fabs(x)) + sqrt(fabs(y)) + sqrt(fabs(z));
01068 return (d*d);
01069 }
01070
01071
01072 static float dist_Minkovsky4(float x, float y, float z, float e)
01073 {
01074 x *= x;
01075 y *= y;
01076 z *= z;
01077 return sqrt(sqrt(x*x + y*y + z*z));
01078 }
01079
01080
01081 static float dist_Minkovsky(float x, float y, float z, float e)
01082 {
01083 return powf(powf(fabs(x), e) + powf(fabs(y), e) + powf(fabs(z), e), 1.0/e);
01084 }
01085
01086
01087
01088
01089 void voronoi(float x, float y, float z, float* da, float* pa, float me, int dtype)
01090 {
01091 int xx, yy, zz, xi, yi, zi;
01092 float xd, yd, zd, d, *p;
01093
01094 float (*distfunc)(float, float, float, float);
01095 switch (dtype) {
01096 case 1:
01097 distfunc = dist_Squared;
01098 break;
01099 case 2:
01100 distfunc = dist_Manhattan;
01101 break;
01102 case 3:
01103 distfunc = dist_Chebychev;
01104 break;
01105 case 4:
01106 distfunc = dist_MinkovskyH;
01107 break;
01108 case 5:
01109 distfunc = dist_Minkovsky4;
01110 break;
01111 case 6:
01112 distfunc = dist_Minkovsky;
01113 break;
01114 case 0:
01115 default:
01116 distfunc = dist_Real;
01117 }
01118
01119 xi = (int)(floor(x));
01120 yi = (int)(floor(y));
01121 zi = (int)(floor(z));
01122 da[0] = da[1] = da[2] = da[3] = 1e10f;
01123 for (xx=xi-1;xx<=xi+1;xx++) {
01124 for (yy=yi-1;yy<=yi+1;yy++) {
01125 for (zz=zi-1;zz<=zi+1;zz++) {
01126 p = HASHPNT(xx, yy, zz);
01127 xd = x - (p[0] + xx);
01128 yd = y - (p[1] + yy);
01129 zd = z - (p[2] + zz);
01130 d = distfunc(xd, yd, zd, me);
01131 if (d<da[0]) {
01132 da[3]=da[2]; da[2]=da[1]; da[1]=da[0]; da[0]=d;
01133 pa[9]=pa[6]; pa[10]=pa[7]; pa[11]=pa[8];
01134 pa[6]=pa[3]; pa[7]=pa[4]; pa[8]=pa[5];
01135 pa[3]=pa[0]; pa[4]=pa[1]; pa[5]=pa[2];
01136 pa[0]=p[0]+xx; pa[1]=p[1]+yy; pa[2]=p[2]+zz;
01137 }
01138 else if (d<da[1]) {
01139 da[3]=da[2]; da[2]=da[1]; da[1]=d;
01140 pa[9]=pa[6]; pa[10]=pa[7]; pa[11]=pa[8];
01141 pa[6]=pa[3]; pa[7]=pa[4]; pa[8]=pa[5];
01142 pa[3]=p[0]+xx; pa[4]=p[1]+yy; pa[5]=p[2]+zz;
01143 }
01144 else if (d<da[2]) {
01145 da[3]=da[2]; da[2]=d;
01146 pa[9]=pa[6]; pa[10]=pa[7]; pa[11]=pa[8];
01147 pa[6]=p[0]+xx; pa[7]=p[1]+yy; pa[8]=p[2]+zz;
01148 }
01149 else if (d<da[3]) {
01150 da[3]=d;
01151 pa[9]=p[0]+xx; pa[10]=p[1]+yy; pa[11]=p[2]+zz;
01152 }
01153 }
01154 }
01155 }
01156 }
01157
01158
01159 static float voronoi_F1(float x, float y, float z)
01160 {
01161 float da[4], pa[12];
01162 voronoi(x, y, z, da, pa, 1, 0);
01163 return da[0];
01164 }
01165
01166 static float voronoi_F2(float x, float y, float z)
01167 {
01168 float da[4], pa[12];
01169 voronoi(x, y, z, da, pa, 1, 0);
01170 return da[1];
01171 }
01172
01173 static float voronoi_F3(float x, float y, float z)
01174 {
01175 float da[4], pa[12];
01176 voronoi(x, y, z, da, pa, 1, 0);
01177 return da[2];
01178 }
01179
01180 static float voronoi_F4(float x, float y, float z)
01181 {
01182 float da[4], pa[12];
01183 voronoi(x, y, z, da, pa, 1, 0);
01184 return da[3];
01185 }
01186
01187 static float voronoi_F1F2(float x, float y, float z)
01188 {
01189 float da[4], pa[12];
01190 voronoi(x, y, z, da, pa, 1, 0);
01191 return (da[1]-da[0]);
01192 }
01193
01194
01195 static float voronoi_Cr(float x, float y, float z)
01196 {
01197 float t = 10*voronoi_F1F2(x, y, z);
01198 if (t>1.f) return 1.f;
01199 return t;
01200 }
01201
01202
01203
01204
01205 static float voronoi_F1S(float x, float y, float z)
01206 {
01207 float da[4], pa[12];
01208 voronoi(x, y, z, da, pa, 1, 0);
01209 return (2.0*da[0]-1.0);
01210 }
01211
01212 static float voronoi_F2S(float x, float y, float z)
01213 {
01214 float da[4], pa[12];
01215 voronoi(x, y, z, da, pa, 1, 0);
01216 return (2.0*da[1]-1.0);
01217 }
01218
01219 static float voronoi_F3S(float x, float y, float z)
01220 {
01221 float da[4], pa[12];
01222 voronoi(x, y, z, da, pa, 1, 0);
01223 return (2.0*da[2]-1.0);
01224 }
01225
01226 static float voronoi_F4S(float x, float y, float z)
01227 {
01228 float da[4], pa[12];
01229 voronoi(x, y, z, da, pa, 1, 0);
01230 return (2.0*da[3]-1.0);
01231 }
01232
01233 static float voronoi_F1F2S(float x, float y, float z)
01234 {
01235 float da[4], pa[12];
01236 voronoi(x, y, z, da, pa, 1, 0);
01237 return (2.0*(da[1]-da[0])-1.0);
01238 }
01239
01240
01241 static float voronoi_CrS(float x, float y, float z)
01242 {
01243 float t = 10*voronoi_F1F2(x, y, z);
01244 if (t>1.f) return 1.f;
01245 return (2.0*t-1.0);
01246 }
01247
01248
01249
01250
01251
01252
01253
01254
01255
01256
01257
01258 static float cellNoiseU(float x, float y, float z)
01259 {
01260 int xi = (int)(floor(x));
01261 int yi = (int)(floor(y));
01262 int zi = (int)(floor(z));
01263 unsigned int n = xi + yi*1301 + zi*314159;
01264 n ^= (n<<13);
01265 return ((float)(n*(n*n*15731 + 789221) + 1376312589) / 4294967296.0);
01266 }
01267
01268
01269 float cellNoise(float x, float y, float z)
01270 {
01271 return (2.0*cellNoiseU(x, y, z)-1.0);
01272 }
01273
01274
01275 void cellNoiseV(float x, float y, float z, float *ca)
01276 {
01277 int xi = (int)(floor(x));
01278 int yi = (int)(floor(y));
01279 int zi = (int)(floor(z));
01280 float *p = HASHPNT(xi, yi, zi);
01281 ca[0] = p[0];
01282 ca[1] = p[1];
01283 ca[2] = p[2];
01284 }
01285
01286
01287
01288
01289
01290
01291
01292 float BLI_gNoise(float noisesize, float x, float y, float z, int hard, int noisebasis)
01293 {
01294 float (*noisefunc)(float, float, float);
01295
01296 switch (noisebasis) {
01297 case 1:
01298 noisefunc = orgPerlinNoiseU;
01299 break;
01300 case 2:
01301 noisefunc = newPerlinU;
01302 break;
01303 case 3:
01304 noisefunc = voronoi_F1;
01305 break;
01306 case 4:
01307 noisefunc = voronoi_F2;
01308 break;
01309 case 5:
01310 noisefunc = voronoi_F3;
01311 break;
01312 case 6:
01313 noisefunc = voronoi_F4;
01314 break;
01315 case 7:
01316 noisefunc = voronoi_F1F2;
01317 break;
01318 case 8:
01319 noisefunc = voronoi_Cr;
01320 break;
01321 case 14:
01322 noisefunc = cellNoiseU;
01323 break;
01324 case 0:
01325 default: {
01326 noisefunc = orgBlenderNoise;
01327
01328 x += 1;
01329 y += 1;
01330 z += 1;
01331 }
01332 }
01333
01334 if (noisesize!=0.0) {
01335 noisesize = 1.0/noisesize;
01336 x *= noisesize;
01337 y *= noisesize;
01338 z *= noisesize;
01339 }
01340
01341 if (hard) return fabs(2.0*noisefunc(x, y, z)-1.0);
01342 return noisefunc(x, y, z);
01343 }
01344
01345
01346 float BLI_gTurbulence(float noisesize, float x, float y, float z, int oct, int hard, int noisebasis)
01347 {
01348 float (*noisefunc)(float, float, float);
01349 float sum, t, amp=1, fscale=1;
01350 int i;
01351
01352 switch (noisebasis) {
01353 case 1:
01354 noisefunc = orgPerlinNoiseU;
01355 break;
01356 case 2:
01357 noisefunc = newPerlinU;
01358 break;
01359 case 3:
01360 noisefunc = voronoi_F1;
01361 break;
01362 case 4:
01363 noisefunc = voronoi_F2;
01364 break;
01365 case 5:
01366 noisefunc = voronoi_F3;
01367 break;
01368 case 6:
01369 noisefunc = voronoi_F4;
01370 break;
01371 case 7:
01372 noisefunc = voronoi_F1F2;
01373 break;
01374 case 8:
01375 noisefunc = voronoi_Cr;
01376 break;
01377 case 14:
01378 noisefunc = cellNoiseU;
01379 break;
01380 case 0:
01381 default:
01382 noisefunc = orgBlenderNoise;
01383 x += 1;
01384 y += 1;
01385 z += 1;
01386 }
01387
01388 if (noisesize!=0.0) {
01389 noisesize = 1.0/noisesize;
01390 x *= noisesize;
01391 y *= noisesize;
01392 z *= noisesize;
01393 }
01394
01395 sum = 0;
01396 for (i=0;i<=oct;i++, amp*=0.5, fscale*=2) {
01397 t = noisefunc(fscale*x, fscale*y, fscale*z);
01398 if (hard) t = fabs(2.0*t-1.0);
01399 sum += t * amp;
01400 }
01401
01402 sum *= ((float)(1<<oct)/(float)((1<<(oct+1))-1));
01403
01404 return sum;
01405
01406 }
01407
01408
01409
01410
01411
01412
01413
01414
01415
01416
01417
01418
01419
01420
01421
01422 float mg_fBm(float x, float y, float z, float H, float lacunarity, float octaves, int noisebasis)
01423 {
01424 float rmd, value=0.0, pwr=1.0, pwHL=pow(lacunarity, -H);
01425 int i;
01426
01427 float (*noisefunc)(float, float, float);
01428 switch (noisebasis) {
01429 case 1:
01430 noisefunc = orgPerlinNoise;
01431 break;
01432 case 2:
01433 noisefunc = newPerlin;
01434 break;
01435 case 3:
01436 noisefunc = voronoi_F1S;
01437 break;
01438 case 4:
01439 noisefunc = voronoi_F2S;
01440 break;
01441 case 5:
01442 noisefunc = voronoi_F3S;
01443 break;
01444 case 6:
01445 noisefunc = voronoi_F4S;
01446 break;
01447 case 7:
01448 noisefunc = voronoi_F1F2S;
01449 break;
01450 case 8:
01451 noisefunc = voronoi_CrS;
01452 break;
01453 case 14:
01454 noisefunc = cellNoise;
01455 break;
01456 case 0:
01457 default: {
01458 noisefunc = orgBlenderNoiseS;
01459 }
01460 }
01461
01462 for (i=0; i<(int)octaves; i++) {
01463 value += noisefunc(x, y, z) * pwr;
01464 pwr *= pwHL;
01465 x *= lacunarity;
01466 y *= lacunarity;
01467 z *= lacunarity;
01468 }
01469
01470 rmd = octaves - floor(octaves);
01471 if (rmd!=0.f) value += rmd * noisefunc(x, y, z) * pwr;
01472
01473 return value;
01474
01475 }
01476
01477
01478
01479
01480
01481
01482
01483
01484
01485
01486
01487
01488
01489
01490
01491 float mg_MultiFractal(float x, float y, float z, float H, float lacunarity, float octaves, int noisebasis)
01492 {
01493 float rmd, value=1.0, pwr=1.0, pwHL=pow(lacunarity, -H);
01494 int i;
01495
01496 float (*noisefunc)(float, float, float);
01497 switch (noisebasis) {
01498 case 1:
01499 noisefunc = orgPerlinNoise;
01500 break;
01501 case 2:
01502 noisefunc = newPerlin;
01503 break;
01504 case 3:
01505 noisefunc = voronoi_F1S;
01506 break;
01507 case 4:
01508 noisefunc = voronoi_F2S;
01509 break;
01510 case 5:
01511 noisefunc = voronoi_F3S;
01512 break;
01513 case 6:
01514 noisefunc = voronoi_F4S;
01515 break;
01516 case 7:
01517 noisefunc = voronoi_F1F2S;
01518 break;
01519 case 8:
01520 noisefunc = voronoi_CrS;
01521 break;
01522 case 14:
01523 noisefunc = cellNoise;
01524 break;
01525 case 0:
01526 default: {
01527 noisefunc = orgBlenderNoiseS;
01528 }
01529 }
01530
01531 for (i=0; i<(int)octaves; i++) {
01532 value *= (pwr * noisefunc(x, y, z) + 1.0);
01533 pwr *= pwHL;
01534 x *= lacunarity;
01535 y *= lacunarity;
01536 z *= lacunarity;
01537 }
01538 rmd = octaves - floor(octaves);
01539 if (rmd!=0.0) value *= (rmd * noisefunc(x, y, z) * pwr + 1.0);
01540
01541 return value;
01542
01543 }
01544
01545
01546
01547
01548
01549
01550
01551
01552
01553
01554
01555 float mg_HeteroTerrain(float x, float y, float z, float H, float lacunarity, float octaves, float offset, int noisebasis)
01556 {
01557 float value, increment, rmd;
01558 int i;
01559 float pwHL = pow(lacunarity, -H);
01560 float pwr = pwHL;
01561
01562 float (*noisefunc)(float, float, float);
01563 switch (noisebasis) {
01564 case 1:
01565 noisefunc = orgPerlinNoise;
01566 break;
01567 case 2:
01568 noisefunc = newPerlin;
01569 break;
01570 case 3:
01571 noisefunc = voronoi_F1S;
01572 break;
01573 case 4:
01574 noisefunc = voronoi_F2S;
01575 break;
01576 case 5:
01577 noisefunc = voronoi_F3S;
01578 break;
01579 case 6:
01580 noisefunc = voronoi_F4S;
01581 break;
01582 case 7:
01583 noisefunc = voronoi_F1F2S;
01584 break;
01585 case 8:
01586 noisefunc = voronoi_CrS;
01587 break;
01588 case 14:
01589 noisefunc = cellNoise;
01590 break;
01591 case 0:
01592 default: {
01593 noisefunc = orgBlenderNoiseS;
01594 }
01595 }
01596
01597
01598 value = offset + noisefunc(x, y, z);
01599 x *= lacunarity;
01600 y *= lacunarity;
01601 z *= lacunarity;
01602
01603 for (i=1; i<(int)octaves; i++) {
01604 increment = (noisefunc(x, y, z) + offset) * pwr * value;
01605 value += increment;
01606 pwr *= pwHL;
01607 x *= lacunarity;
01608 y *= lacunarity;
01609 z *= lacunarity;
01610 }
01611
01612 rmd = octaves - floor(octaves);
01613 if (rmd!=0.0) {
01614 increment = (noisefunc(x, y, z) + offset) * pwr * value;
01615 value += rmd * increment;
01616 }
01617 return value;
01618 }
01619
01620
01621
01622
01623
01624
01625
01626
01627
01628 float mg_HybridMultiFractal(float x, float y, float z, float H, float lacunarity, float octaves, float offset, float gain, int noisebasis)
01629 {
01630 float result, signal, weight, rmd;
01631 int i;
01632 float pwHL = pow(lacunarity, -H);
01633 float pwr = pwHL;
01634 float (*noisefunc)(float, float, float);
01635
01636 switch (noisebasis) {
01637 case 1:
01638 noisefunc = orgPerlinNoise;
01639 break;
01640 case 2:
01641 noisefunc = newPerlin;
01642 break;
01643 case 3:
01644 noisefunc = voronoi_F1S;
01645 break;
01646 case 4:
01647 noisefunc = voronoi_F2S;
01648 break;
01649 case 5:
01650 noisefunc = voronoi_F3S;
01651 break;
01652 case 6:
01653 noisefunc = voronoi_F4S;
01654 break;
01655 case 7:
01656 noisefunc = voronoi_F1F2S;
01657 break;
01658 case 8:
01659 noisefunc = voronoi_CrS;
01660 break;
01661 case 14:
01662 noisefunc = cellNoise;
01663 break;
01664 case 0:
01665 default: {
01666 noisefunc = orgBlenderNoiseS;
01667 }
01668 }
01669
01670 result = noisefunc(x, y, z) + offset;
01671 weight = gain * result;
01672 x *= lacunarity;
01673 y *= lacunarity;
01674 z *= lacunarity;
01675
01676 for (i=1; (weight>0.001) && (i<(int)octaves); i++) {
01677 if (weight>1.0) weight=1.0;
01678 signal = (noisefunc(x, y, z) + offset) * pwr;
01679 pwr *= pwHL;
01680 result += weight * signal;
01681 weight *= gain * signal;
01682 x *= lacunarity;
01683 y *= lacunarity;
01684 z *= lacunarity;
01685 }
01686
01687 rmd = octaves - floor(octaves);
01688 if (rmd!=0.f) result += rmd * ((noisefunc(x, y, z) + offset) * pwr);
01689
01690 return result;
01691
01692 }
01693
01694
01695
01696
01697
01698
01699
01700
01701
01702
01703 float mg_RidgedMultiFractal(float x, float y, float z, float H, float lacunarity, float octaves, float offset, float gain, int noisebasis)
01704 {
01705 float result, signal, weight;
01706 int i;
01707 float pwHL = pow(lacunarity, -H);
01708 float pwr = pwHL;
01709
01710 float (*noisefunc)(float, float, float);
01711 switch (noisebasis) {
01712 case 1:
01713 noisefunc = orgPerlinNoise;
01714 break;
01715 case 2:
01716 noisefunc = newPerlin;
01717 break;
01718 case 3:
01719 noisefunc = voronoi_F1S;
01720 break;
01721 case 4:
01722 noisefunc = voronoi_F2S;
01723 break;
01724 case 5:
01725 noisefunc = voronoi_F3S;
01726 break;
01727 case 6:
01728 noisefunc = voronoi_F4S;
01729 break;
01730 case 7:
01731 noisefunc = voronoi_F1F2S;
01732 break;
01733 case 8:
01734 noisefunc = voronoi_CrS;
01735 break;
01736 case 14:
01737 noisefunc = cellNoise;
01738 break;
01739 case 0:
01740 default: {
01741 noisefunc = orgBlenderNoiseS;
01742 }
01743 }
01744
01745 signal = offset - fabs(noisefunc(x, y, z));
01746 signal *= signal;
01747 result = signal;
01748 weight = 1.f;
01749
01750 for( i=1; i<(int)octaves; i++ ) {
01751 x *= lacunarity;
01752 y *= lacunarity;
01753 z *= lacunarity;
01754 weight = signal * gain;
01755 if (weight>1.0) weight=1.0; else if (weight<0.0) weight=0.0;
01756 signal = offset - fabs(noisefunc(x, y, z));
01757 signal *= signal;
01758 signal *= weight;
01759 result += signal * pwr;
01760 pwr *= pwHL;
01761 }
01762
01763 return result;
01764 }
01765
01766
01767
01768
01769 float mg_VLNoise(float x, float y, float z, float distortion, int nbas1, int nbas2)
01770 {
01771 float rv[3];
01772 float (*noisefunc1)(float, float, float);
01773 float (*noisefunc2)(float, float, float);
01774
01775 switch (nbas1) {
01776 case 1:
01777 noisefunc1 = orgPerlinNoise;
01778 break;
01779 case 2:
01780 noisefunc1 = newPerlin;
01781 break;
01782 case 3:
01783 noisefunc1 = voronoi_F1S;
01784 break;
01785 case 4:
01786 noisefunc1 = voronoi_F2S;
01787 break;
01788 case 5:
01789 noisefunc1 = voronoi_F3S;
01790 break;
01791 case 6:
01792 noisefunc1 = voronoi_F4S;
01793 break;
01794 case 7:
01795 noisefunc1 = voronoi_F1F2S;
01796 break;
01797 case 8:
01798 noisefunc1 = voronoi_CrS;
01799 break;
01800 case 14:
01801 noisefunc1 = cellNoise;
01802 break;
01803 case 0:
01804 default: {
01805 noisefunc1 = orgBlenderNoiseS;
01806 }
01807 }
01808
01809 switch (nbas2) {
01810 case 1:
01811 noisefunc2 = orgPerlinNoise;
01812 break;
01813 case 2:
01814 noisefunc2 = newPerlin;
01815 break;
01816 case 3:
01817 noisefunc2 = voronoi_F1S;
01818 break;
01819 case 4:
01820 noisefunc2 = voronoi_F2S;
01821 break;
01822 case 5:
01823 noisefunc2 = voronoi_F3S;
01824 break;
01825 case 6:
01826 noisefunc2 = voronoi_F4S;
01827 break;
01828 case 7:
01829 noisefunc2 = voronoi_F1F2S;
01830 break;
01831 case 8:
01832 noisefunc2 = voronoi_CrS;
01833 break;
01834 case 14:
01835 noisefunc2 = cellNoise;
01836 break;
01837 case 0:
01838 default: {
01839 noisefunc2 = orgBlenderNoiseS;
01840 }
01841 }
01842
01843
01844 rv[0] = noisefunc1(x+13.5, y+13.5, z+13.5) * distortion;
01845 rv[1] = noisefunc1(x, y, z) * distortion;
01846 rv[2] = noisefunc1(x-13.5, y-13.5, z-13.5) * distortion;
01847 return noisefunc2(x+rv[0], y+rv[1], z+rv[2]);
01848 }
01849
01850
01851
01852
01853
01854 }