Frage

Ich will ein Perlin Noise auf dem iPhone animierte erstellen, so dass ich schließlich etwas tun kann: http://dl.dropbox.com/u/1977230/example.png

Ich habe gesucht und gesucht, aber nichts Vergleichbares oder einen Weg finden, um tatsächlich Lärm ein Perlin angezeigt werden soll.

Ich habe gesagt, auf OpenGL ES suchen, aber auch für ein Beispiel von Perlin suchen Rauschen oder ein Lava / Plasma-Effekt führt nicht alles.

Ich würde wirklich etwas Hilfe auf diesem schätzen.

Danke Jungs, Andre

War es hilfreich?

Lösung

Nun, erste Studie der Perlin Noise Algorithmus selbst. http://en.wikipedia.org/wiki/Perlin_noise sieht nur den besten Platz zu nehmen aus.

Wenn Sie die RGBA-Daten dieser Effekt von Ihnen haben, beginnt die böse Sache.

Es gibt zwei Optionen im Grunde.

  • Erstellen Sie eine UIView-Unterklasse und überschreiben die Auslosung: (CGRect) -Methode. Verwenden Konvertieren RGB-Daten in eine Bitmap in Objective-C ++ Cocoa weise eine CGImage aus Ihren Daten und zu erstellen und das Bild für den aktuellen Kontext in draw ziehen.

    CGContextDrawImage(UIGraphicsGetCurrentContext(), <#CGRect rect#>, <#CGImageRef image#>);
    

    Wenn dies ein Standbild ist, sind Sie in Ordnung. Wenn es belebende, könnte dies nicht die beste Lösung sein.

  • Setzen Sie sich mit OpenGL ES auf dem iPhone vertraut. Das Beispiel OpenGL ES iPhone SDK ist ein ausgezeichneter Ausgangspunkt. Studieren Sie Textur-Mapping. Sobald Sie sind vertraut mit glTexImage2D, Verwendung, dass Ihr Bild zu laden.

    Das Beispiel lässt sich leicht mit dem folgenden erweitert werden:

    haben diese definiert:

      GLuint spriteTexture;
      GLubyte *spriteData;  // the perlin noise will be here
      size_t    width, height;
    

    dann im ESRenderer init-Methode schafft Raum für die Textur:

    - (id) init { ....
    width = 512;  // make sure the texture size is the power of 2
    height = 512;
    
    glGenTextures(1, &spriteTexture);       
    glBindTexture(GL_TEXTURE_2D, spriteTexture);        
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, spriteData);       
    //free(spriteData); // free this if not used any more
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);   
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);         
    

    Falls das Rauschen in regelmäßigen Abständen aktualisiert wird, aktualisieren Sie die Textur in dem Verfahren machen

            - (void) render { .....
    glBindTexture(GL_TEXTURE_2D, spriteTexture);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, spriteData);   
    

Ah, ich vermisse das gute alte Video ist auf A000 Tagen $:)

Andere Tipps

Ich begann ein Open-Source-Projekt auf Github, dass Sie zur Erzeugung von Perlin Rauschen verwenden können. Es unterstützt die vollständige 4-dimensionale (x, y, z, t) Perlin Generation. Es enthält auch ein Projekt mit einem Sandbox-App mit Textur Ideen zu spielen. http://czgarrett.com/code/2011 /05/18/perlin-noise-generator-for-ios.html

Jetzt gibt es eine weitere Perlin Rauschfunktion für GLSL Shader, die nicht Texturen benötigt Lookup:

scroll top