Question

Je veux créer une animation Perlin bruit sur l'iPhone, donc je peux finalement faire quelque chose comme ceci: http://dl.dropbox.com/u/1977230/example.png

Je l'ai regardé et regardé, mais ne peut pas trouver quelque chose de semblable ou un moyen d'afficher en fait un bruit de Perlin.

On m'a dit de regarder OpenGL ES, mais même la recherche d'un exemple de bruit Perlin ou un effet lave / plasma ne nous donne pas.

Je vous en serais reconnaissant de l'aide sur celui-ci.

Merci les gars, André

Était-ce utile?

La solution

Eh bien, d'abord étudier l'algorithme de bruit Perlin lui-même. http://en.wikipedia.org/wiki/Perlin_noise regarde juste le meilleur endroit pour prendre off.

Une fois que vous avez les données RGBA de cet effet de la vôtre, la mauvaise chose commence.

Il y a deux options fondamentalement.

  • Créer une sous-classe UIView et remplacer le tirage au sort: Méthode (CGRect). Utilisation Conversion des données RVB en un bitmap dans des Objective-C Cocoa à bon escient pour créer un CGImage de vos données et cette image et d'en tirer le contexte actuel tirage.

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

    Si cela est une image fixe, vous êtes ok. si elle est animant, cela pourrait ne pas être la meilleure solution.

  • Familiarisez-vous avec OpenGL ES sur l'iPhone. L'exemple OpenGL ES SDK iPhone est un excellent point de départ. mappage de texture d'étude. Une fois que vous êtes familier avec glTexImage2D, utiliser pour charger l'image.

    L'exemple peut être facilement étendu avec les éléments suivants:

    ont ces définit:

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

    puis dans la méthode init ESRenderer créer un espace pour la texture:

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

    Dans le cas où le bruit est mis à jour périodiquement, mettre à jour la texture dans la méthode 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, je rate la bonne vieille vidéo est les jours de A000 $:)

Autres conseils

J'ai commencé un projet open source sur Github que vous pouvez utiliser pour générer un bruit de Perlin. Il prend en charge pleine à 4 dimensions (x, y, z, t) génération Perlin. Il comprend également un projet avec une application de bac à sable pour jouer avec des idées de texture. http://czgarrett.com/code/2011 /05/18/perlin-noise-generator-for-ios.html

Maintenant, il y a une autre fonction de bruit Perlin pour shader GLSL qui ne nécessite pas des textures de consultation:

scroll top