1 |
{ RCSid $Id$ } |
2 |
{ 3-D Perlin Noise function } |
3 |
|
4 |
frac(x):x-floor(x); |
5 |
|
6 |
hermite(p0,p1,r0,r1,t) : p0 * ((2*t-3)*t*t+1) + |
7 |
p1 * (-2*t+3)*t*t + |
8 |
r0 * (((t-2)*t+1)*t) + |
9 |
r1 * ((t-1)*t*t); |
10 |
|
11 |
rand3a(x,y,z) : 1-2*rand(.69692*x+.35084*y+.26765*z); |
12 |
rand3b(x,y,z) : 1-2*rand(.05393*x+.96196*y+.28617*z); |
13 |
rand3c(x,y,z) : 1-2*rand(.04234*x+.46180*y+.54550*z); |
14 |
rand3d(x,y,z) : 1-2*rand(.07211*x+.76411*y+.95567*z); |
15 |
|
16 |
noise_3(xl,xd,xu,yl,yd,yu,zl,zd,zu) : |
17 |
hermite( |
18 |
hermite( |
19 |
hermite(rand3d(xl,yl,zl), |
20 |
rand3d(xu,yl,zl), |
21 |
rand3a(xl,yl,zl), |
22 |
rand3a(xu,yl,zl), |
23 |
xd), |
24 |
hermite(rand3d(xl,yu,zl), |
25 |
rand3d(xu,yu,zl), |
26 |
rand3a(xl,yu,zl), |
27 |
rand3a(xu,yu,zl), |
28 |
xd), |
29 |
(1-xd)*rand3b(xl,yl,zl)+ |
30 |
xd*rand3b(xu,yl,zl), |
31 |
(1-xd)*rand3b(xl,yu,zl)+ |
32 |
xd*rand3b(xu,yu,zl), |
33 |
yd), |
34 |
hermite( |
35 |
hermite(rand3d(xl,yl,zu), |
36 |
rand3d(xu,yl,zu), |
37 |
rand3a(xl,yl,zu), |
38 |
rand3a(xu,yl,zu), |
39 |
xd), |
40 |
hermite(rand3d(xl,yu,zu), |
41 |
rand3d(xu,yu,zu), |
42 |
rand3a(xl,yu,zu), |
43 |
rand3a(xu,yu,zu), |
44 |
xd), |
45 |
(1-xd)*rand3b(xl,yl,zu)+ |
46 |
xd*rand3b(xu,yl,zu), |
47 |
(1-xd)*rand3b(xl,yu,zu)+ |
48 |
xd*rand3b(xu,yu,zu), |
49 |
yd), |
50 |
(1-yd)*((1-xd)*rand3c(xl,yl,zl) + |
51 |
xd*rand3c(xu,yl,zl)) + |
52 |
yd*((1-xd)*rand3c(xl,yu,zl) + |
53 |
xd*rand3c(xu,yu,zl)), |
54 |
(1-yd)*((1-xd)*rand3c(xl,yl,zu) + |
55 |
xd*rand3c(xu,yl,zu)) + |
56 |
yd*((1-xd)*rand3c(xl,yu,zu) + |
57 |
xd*rand3c(xu,yu,zu)), |
58 |
zd); |
59 |
|
60 |
|
61 |
noise3(x,y,z) : noise_3( floor(x),frac(x),ceil(x), |
62 |
floor(y),frac(y),ceil(y), |
63 |
floor(z),frac(z),ceil(z) ); |