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