Gradientenbasierte Rauschfunktionen und Perlin Noise - Campus ...
Gradientenbasierte Rauschfunktionen und Perlin Noise - Campus ...
Gradientenbasierte Rauschfunktionen und Perlin Noise - Campus ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Burger: <strong>Gradientenbasierte</strong> <strong>Rauschfunktionen</strong> <strong>und</strong> <strong>Perlin</strong> <strong>Noise</strong> 19<br />
Algorithmus 3: Zweidimensionale <strong>Perlin</strong> <strong>Noise</strong>-Funktion. Die deterministische<br />
Funktion grad(u,v) liefert für jeden Gitterpunkt (u,v) ∈ Z 2 einen<br />
zufälligen, zweidimensionalen Gradientenvektor g ∈ R 2 . s(x) ist die eindimendionale<br />
Überblendungsfunktion aus Gl. 24 oder die (hier verwendete)<br />
modifizierte Version aus Gl. 27.<br />
1: noise(x,y) ⊲ x,y ∈ R<br />
Returns the value of the two-dimensional <strong>Perlin</strong> noise function for<br />
the continuous position (x,y).<br />
2: px ← ⌊x⌋<br />
3: py ← ⌊y⌋<br />
4: g 00 ← grad(px,py) ⊲ 2D gradient vectors<br />
5: g 10 ← grad(px +1,py)<br />
6: g 01 ← grad(px,py +1)<br />
7: g 11 ← grad(px +1,py +1)<br />
8: ˙x ← x−px ⊲ ˙x, ˙y ∈ [0,1]<br />
9: ˙y ← y −py<br />
10: w00 ← gT 00 · <br />
˙x<br />
˙y<br />
11: w10 ← gT 10 ·<br />
<br />
˙x−1<br />
˙y<br />
12: w01 ← gT 01 · <br />
˙x<br />
˙y−1<br />
13: w11 ← gT 11 ·<br />
<br />
˙x−1<br />
˙y−1<br />
14: w ← interpolate(˙x, ˙y,w00,w10,w01,w11)<br />
15: return w<br />
16: end<br />
⊲ tangent values (dot vector products)<br />
17: interpolate(˙x, ˙y,w00,w10,w01,w11)<br />
Returns the locally interpolated noise function value for ˙x, ˙y ∈ [0,1],<br />
given the tangent values w00,...w11 ∈ R.<br />
18: sx ← s(˙x) ⊲ blending function: s(x) = 10x 3 −15x 4 +6x 5<br />
19: sy ← s(˙y)<br />
20: w0 = (1−sx)·w00 +sx ·w10 ⊲ interpolate in x-direction (2×)<br />
21: w1 = (1−sx)·w01 +sx ·w11<br />
22: return (1−sy)·w0 +sy ·w1<br />
23: end<br />
ist. Die ganzzahligen Gitterpunkte p = (p0,p1,...pN−1) T ∈ Z N sind wiederum<br />
auch Nullstellen der Funktion noise(x) mit den zugehörigen (zufällig