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> 23<br />

Ein N-dimensionaler Hyperwürfel besitzt entlang jeder Dimension k genau<br />

2 N−1 Kanten, die jeweils zwei seiner Eckpunkte p a,p b verbinden. Die<br />

Koordinatenvektoren dieser Endpunkte unterscheiden sich nur bezüglich der<br />

Dimension k, d. h.,<br />

p a[k] = p b[k] <strong>und</strong> p a[l] = p b[l] für l = k, 0 ≤ k < N.<br />

In jedem Interpolationsschritt wird zwischen den Werten der Tangentenfunktionen<br />

wa = ha(x) <strong>und</strong> wb = hb(x) von zwei in Dimension k benachbarten<br />

Eckpunktenp a,p b desxumschließenden Hyperwürfels interpoliert, <strong>und</strong> zwar<br />

in der bereits bekannten Form<br />

¯wa,b = (1−s(xk))·wa +s(xk)·wb, (73)<br />

wobei xk die k-te Komponente von x ist <strong>und</strong> s() die nichtlineare Überblendungsfunktion<br />

(Gl. 24 bzw. Gl. 27) bezeichnet. Bei jeder einzelnen Interpolation<br />

werden also die Werte von zwei Nachbarknoten auf einen Wert reduziert.<br />

Die so entstehenden Zwischenwerte können wiederum als Eckpunkte<br />

eines Hyperwürfels interpretiert werden, dessen Dimension gegenüber dem<br />

ursprünglichen Würfel um eins reduziert ist.<br />

Wir benötigen also N Interpolationsschritte, um die ursprünglich 2 N<br />

Knotenwerte eines N-dimensionalen Hyperwürfels auf einen Skalarwert (entspricht<br />

Dimension null) zu reduzieren. Es sollte belanglos sein, in welcher<br />

Reihenfolge entlang der einzelnen Dimensionen interpoliert wird. 14 Beispielsweise<br />

könnte die schrittweise Interpolation in folgender Sequenz über die<br />

Dimensionen k = 0,1,...N−1 ausgeführt werden:<br />

w (N) ← (w0,...w 2 N −1) = (hj(x),...h 2 N −1(x))<br />

w (N−1) ← interpolate(x,w (N) ,0)<br />

w (N−2) ← interpolate(x,w (N−1) ,1)<br />

.<br />

.<br />

w (N−k−1) ← interpolate(x,w (N−k) ,k) (74)<br />

.<br />

.<br />

w = w (0) ← interpolate(x,w (1) ,N−1)<br />

Dabei ist w (n) jeweils ein Vektor der Länge 2 n ; die Länge des Vektors w<br />

wird also in jedem Schritt um die Hälfte verkleinert. Das finale Ergebnis der<br />

Interpolation an der Position x, w = w (0) , ist ein skalarer Wert (bzw. ein<br />

null-dimensionaler Vektor).<br />

14<br />

Es wäre zu überprüfen, inwieweit konkret bei der <strong>Perlin</strong>-Interpolation das Ergebnis<br />

von der Reihenfolge der Dimensionen abhängt.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!