Frage

Ich war Perlin Noise durch einige Beispiele zu studieren @ http://dindinx.net /OpenGL/index.php?menu=exemples&submenu=shaders und konnte nicht umhin zu bemerken, dass seine make3DNoiseTexture() in perlin.c Anwendungen noise3(ni) statt PerlinNoise3D(...)

Nun, warum ist das so? Ist das nicht Perlin Noise soll eine Summe von verschiedenen Geräuschfrequenzen und Amplituden sein?

Qestion 2 ist das, was für ni, inci, incj, inck Stand tut? Warum Gebrauch ni statt x, y-Koordinaten? Warum ist ni inkrementierten mit
ni[0]+=inci;
inci = 1.0 / (Noise3DTexSize / frequency);
Ich sehe Hugo Elias schuf seine Perlin2D mit x, y-Koordinaten, und so auch PerlinNoise3D (...).

Vielen Dank im Voraus:)

War es hilfreich?

Lösung

ich jetzt verstehen, warum und werde meine eigene Frage in der Hoffnung, antworten, dass es andere Menschen hilft.

Perlin Noise ist eigentlich eine Synthese von Gradienten Geräusche. In seinem Herstellungsverfahren, müssen wir das Skalarprodukt eines Vektors zeigt von einer der Ecken Bodenbelag den Eingangspunkt zu dem Eingabepunkt sich mit der Zufallsgenerierten Gradientenvektor berechnen.

Nun, wenn der Eingabepunkt eine ganze Zahl, wie die XYZ-Koordinaten einer Textur waren Sie erstellen möchten, würde das Skalarprodukt immer 0 zurück, die Sie mit einem Flach Lärm geben würde. Anstatt also, wir inci, incj, inck als Alternative Index verwenden. Ja, nur ein Index, sonst nichts.

Nun zur Frage der Rückkehr 1, gibt es zwei Methoden Perlin Noise umzusetzen:
1.Calculate die Lärmwerte getrennt und speichern sie in den RGBA-Slots in der Textur
2.Synthesize die Geräusche vor-Hand nach oben und speichern sie in einer der RGBA Schlitze in der Textur

noise3(ni) ist die tatsächliche Durchführung der Methode 1, während die letztere PerlinNoise3D(...) vermuten lassen.

In meiner persönlichen Meinung nach Methode 1 ist viel besser, weil man viel mehr Flexibilität darüber, wie Sie jede Oktave in Ihrem Shadern verwenden.

Andere Tipps

Meine Vermutung auf den Grund für die Verwendung noise3(ni) in make3DNoiseTexture() statt, wenn PerlinNoise3D(...) ist, dass, wenn Sie, dass Lärm Textur in Ihrem Shader verwenden Sie die Funktionalität von PerlinNoise3D(...) direkt im Shader in der Lage sein zu replizieren und zu ändern.

Meine Vermutung für die Argumentation hinter ni, inci, incj, inck ist, dass x, y, z des Volumens direkt mit nicht ein gutes Ergebnis geben, damit durch die das Rauschen mit der Frequenz Skalierung statt ist es möglich, die Auflösung des Rauschens unabhängig einzustellen von der Volumengröße.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top