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

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Burger: <strong>Gradientenbasierte</strong> <strong>Rauschfunktionen</strong> <strong>und</strong> <strong>Perlin</strong> <strong>Noise</strong> 13<br />

Algorithmus 2: Generierung einer eindimensionalen <strong>Perlin</strong> <strong>Noise</strong>-Funktion<br />

mit mehreren Frequenzen.<br />

1: <strong>Noise</strong>(x,fmin,fmax,φ) ⊲ x,fmin,fmax,p ∈ R<br />

Returns the value of the one-dimensional, multi-frequency <strong>Perlin</strong><br />

noise function for position x. fmin,fmax specify the frequency range,<br />

φ denotes the persistence value for attenuating the amplitudes<br />

(0 < φ < 1).<br />

2: sum ← 0<br />

3: n ← 0 ⊲ n = 0,1,...<br />

4: f ← fmin ⊲ frequency fn ← fmin = f0<br />

5: a ← 1 ⊲ amplitude an ← a0 = φ 0<br />

6: while f ≤ fmax do<br />

7: sum ← sum +a·noise(f ·x) ⊲ noise() as defined in Alg. 1<br />

8: n ← n+1<br />

9: f ← 2·f ⊲ fn = 2 n ·fmin<br />

10: a ← φ·a ⊲ an = φ n<br />

11: end while<br />

12: return sum.<br />

13: end<br />

wobei der konstante Wert φ ∈ R als Persistence bezeichnet wird. Typische<br />

Werte für φ sind 0.25...0.5. Die Generierung einer eindimensionalen<br />

Rauschfunktion ist in Alg. 2 nochmals übersichtlich zusammengestellt. Abbildung<br />

9 zeigt ein Beispiel einer kombinierten Funktion bestehend aus drei<br />

Teilfunktionen mit f0 = 1 <strong>und</strong> φ = 0.5.<br />

2.4 Erzeugung der „zufälligen“ Gradientenwerte<br />

Bisher noch offen ist die Frage, wie die pseudo-zufälligen Gradientenwerte<br />

g i = grad(i) für beliebige i ∈ Z erzeugt werden. Die Abbildung grad(i) ist<br />

für eine bestimmte Rauschfunktion fix, d. h. grad(i) muss für ein bestimmtes<br />

i auch bei wiederholter Anwendung immer den selben Wert liefern. Es<br />

ist also nicht zulässig, bei jedem Aufruf von grad(i) einen beliebigen neuen<br />

Zufallswert zu berechnen.<br />

2.4.1 Verwendung einer Hash-Funktion<br />

Die übliche Methode ist die „on-the-fly“ Berechnung der Gradientenwerte für<br />

einen gegebenen Index i mittels einer Hash-Funktion<br />

hash(i) : Z → [0,1],

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!