08.10.2013 Aufrufe

Gradientenbasierte Rauschfunktionen und Perlin Noise - Campus ...

Gradientenbasierte Rauschfunktionen und Perlin Noise - Campus ...

Gradientenbasierte Rauschfunktionen und Perlin Noise - Campus ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!