Domanda

Voglio creare un animato Perlin rumore su iPhone, in modo da poter in ultima analisi, fare qualcosa di simile: http://dl.dropbox.com/u/1977230/example.png

Ho guardato e guardato, ma non riesce a trovare nulla di simile o un modo per visualizzare in realtà un Perlin Noise.

mi è stato detto di guardare OpenGL ES, ma anche alla ricerca di un esempio di Perlin rumore o un effetto di lava / al plasma non si traduce in nulla.

Mi piacerebbe davvero apprezzare un certo aiuto su questo.

Grazie ragazzi, Andre

È stato utile?

Soluzione

Bene, il primo studio Perlin Noise stesso algoritmo. http://en.wikipedia.org/wiki/Perlin_noise sembra proprio il posto migliore per prendere off.

Una volta che hai i dati RGBA di questo effetto del vostro, la cosa brutta comincia.

Ci sono due opzioni in fondo.

  • creare una sottoclasse UIView e sovrascrivere il pareggio: il metodo (CGRect). Utilizzare Conversione dei dati RGB in una bitmap in Objective-C ++ Cocoa sapientemente per creare un CGImage dai vostri dati e e disegnare l'immagine al contesto corrente in pareggio.

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

    Se questa immagine un fermo è, tu sei ok. Se si tratta di animazione, questo potrebbe non essere la soluzione migliore.

  • acquisire familiarità con OpenGL ES su iPhone. esempio OpenGL ES di L'iPhone SDK è un ottimo punto di partenza. Studiare Texture Mapping. Una volta che si ha familiarità con glTexImage2D, l'uso che per caricare la vostra immagine.

    L'esempio può essere facilmente esteso con la seguente:

    hanno queste definizioni:

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

    poi nel metodo init ESRenderer creare spazio per la trama:

    - (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);         
    

    Nel caso il rumore viene periodicamente aggiornato, aggiorna la struttura del metodo render

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

Ah, mi manca il buon vecchio video è su $ A000 giorni:)

Altri suggerimenti

Ho iniziato un progetto open source su Github che è possibile utilizzare per la generazione di rumore Perlin. Supporta pieno 4-dimensionale (x, y, z, t) generazione Perlin. Esso include anche un progetto con un'applicazione sandbox di giocare con le idee di texture. http://czgarrett.com/code/2011 /05/18/perlin-noise-generator-for-ios.html

Ora c'è un'altra funzione del disturbo Perlin per GLSL dello shader che non richiede ricerca texture: https://github.com/ashima/webgl-noise/tree/master/src . Questo dovrebbe funzionare su iPhone.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top