Pregunta

Quiero crear una Perlin animados de ruido en el iPhone, por lo que en última instancia puede hacer algo como esto: http://dl.dropbox.com/u/1977230/example.png

He miraba y miraba, pero no puede encontrar nada similar o una forma de mostrar una realidad Ruido Perlin.

Me han dicho que mirar OpenGL ES, pero incluso la búsqueda de un ejemplo de Perlin ruido o un efecto de lava / de plasma no resulta en nada.

Te lo agradecería un poco de ayuda en este caso.

Gracias chicos, Andre

¿Fue útil?

Solución

Bueno, el primer estudio de ruido Perlin propio algoritmo. http://en.wikipedia.org/wiki/Perlin_noise se ve simplemente el mejor lugar para tomar off.

Una vez que tenga los datos RGBA de este efecto de los suyos, lo desagradable comienza.

Hay dos opciones básicamente.

  • Crea una subclase UIView y anular el sorteo: Método (CGRect). Usar la conversión de los datos RGB en un mapa de bits en Objective-C ++ Cacao sabiamente para crear un CGImage de sus datos y esa imagen y dibujar al contexto actual en el sorteo.

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

    Si esta imagen es una imagen fija, estás bien. Si se trata de animación, esto podría no ser la mejor solución.

  • Obtener familiarizado con OpenGL ES en el iPhone. ejemplo OpenGL ES del iPhone SDK es un excelente punto de partida. Estudiar la textura de la cartografía. Una vez que esté familiarizado con glTexImage2D, el uso que se cargue la imagen.

    El ejemplo se puede extender fácilmente con la siguiente:

    tiene estas define:

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

    a continuación, en el método init ESRenderer crear un espacio para la textura:

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

    En caso de que el ruido se actualiza periódicamente, actualice la textura en el render método

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

Ah, se me olvida el bien de vídeo de edad es de $ A000 días:)

Otros consejos

I comenzó un proyecto de código abierto en Github que se puede utilizar para generar ruido de Perlin. Es compatible con (x, y, z, t) la generación de 4-dimensional completo Perlin. También incluye un proyecto con una aplicación de caja de arena para jugar con las ideas de textura. http://czgarrett.com/code/2011 /05/18/perlin-noise-generator-for-ios.html

Ahora, hay otra función de ruido Perlin para Shader GLSL que no requiere operaciones de búsqueda texturas: https://github.com/ashima/webgl-noise/tree/master/src . Esto debería funcionar en iPhones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top