Gradientenbasierte Rauschfunktionen und Perlin Noise - Campus ...
Gradientenbasierte Rauschfunktionen und Perlin Noise - Campus ...
Gradientenbasierte Rauschfunktionen und Perlin Noise - Campus ...
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> 34<br />
Algorithmus 6: Implementierungsbeispiele für die 32-Bit Integer-Hashfunktion<br />
hashInt(k). Angenommen wird die übliche Darstellung der Zahlenwerte<br />
im Zweierkomplement. Der Parameter k ist ein beliebiger Integerwert<br />
im Intervall [−2 −31 ,2 31 −1]; der Rückgabewert ist eine positive Integer-Zahl<br />
im Intervall [0,2 31 − 1]. Siehe Tab. 1 zur Beschreibung der hier verwendeten<br />
Bit-Operatoren. maxInt bezeichnet die maximale (positive) 32 Bit-Zahl<br />
(2 31 −1 = 2147483647).<br />
1: HashIntWard(k) ⊲ aus [12]<br />
2: k ← (k ≪ 13) xor k<br />
3: k ← k ·(k 2 ·15731+789221)+1376312589<br />
4: return (k and maxInt)<br />
5: end<br />
6: HashIntShift(k) ⊲ aus [11]<br />
7: M ← (2 31 −1)<br />
8: k ← ¯ k +(k ≪ 15)<br />
9: k ← k xor(k ≫ 12)<br />
10: k ← k +(k ≪ 2)<br />
11: k ← k xor(k ≫ 4)<br />
12: k ← k ·2057<br />
13: k ← k xor(k ≫ 16)<br />
14: return (k and maxInt).<br />
15: end<br />
16: HashIntShiftMult(k) ⊲ aus [11]<br />
17: C ← 668265261 ⊲ a prime or at least odd constant<br />
18: M ← (2 31 −1)<br />
19: k ← (k xor 61) xor(k ≫ 16)<br />
20: k ← k +(k ≪ 3)<br />
21: k ← k xor(k ≫ 4)<br />
22: k ← k ·C<br />
23: k ← k xor(k ≫ 15)<br />
24: return (k and maxInt).<br />
25: end<br />
mensionalen Fall mit Gitterkoordinaten (u,v,w) kann der Integer-Hashwert<br />
beispielsweise durch folgende Methode berechnet werden:<br />
h = hashInt(pu ·u+pv ·v +pw ·w), (97)<br />
wobei pu,pv,pw unterschiedliche (typischerweise kleine) Primzahlen sind.<br />
Damit können wir auf einfache Weise auch jenenHashfunktionen definieren,<br />
die uns für jeden Gitterpunkt imn-dimensionalen Raum dien(unabhängigen)<br />
Elemente des zufälligen Gradientenvektors liefern. Diese hatten wir