我想在 iPhone 上创建动画柏林噪音,所以我最终可以做这样的事情: http://dl.dropbox.com/u/1977230/example.png

我看了又看,但找不到任何类似的东西或实际显示柏林噪声的方法。

我被告知要查看 OpenGL ES,但即使搜索 Perlin 噪声或熔岩/等离子体效果的示例也不会产生任何结果。

我真的很感激对此的一些帮助。

谢谢,安德烈

有帮助吗?

解决方案

好了,第一项研究的培林噪声算法本身。 http://en.wikipedia.org/wiki/Perlin_noise 看起来只是最好的地方起飞。

一旦你有RGBA数据的这种效果是你,讨厌的事情开始。

有两种方案基本上是这样。

  • 创建一个)子类和复盖绘制:(CGRect)的方法。使用 转换RGB数据到位,在目标C++可可 明智地为创建一个CGImage从你的数据和绘制图像到目前上下文中得出。

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

    如果这是一个静态图像,你是好。如果这是动画,这可能不是最好的解决办法。

  • 获得熟悉载ES在iPhone上。IPhone SDK载ES例是一个良好的起点。研究的质地映射。一旦你熟悉glTexImage2D、使用,以载你的形象。

    例如,可以很容易地扩大与如下:

    拥有这些定义:

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

    然后在ESRenderer init方法创造空间的纹理:

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

    在情况下噪音是定期更新,更新的纹理在呈现的方法

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

啊,我错过的好视频是在$A000日)

其他提示

我在Github上开始一个开源项目,您可以使用生成柏林噪声。它支持完整的4维(X,Y,Z,T)培林代。它还包括一个沙盒应用项目有质感的想法玩。 http://czgarrett.com/code/2011 /05/18/perlin-noise-generator-for-ios.html

现在 GLSL 着色器还有另一个不需要查找纹理的 Perlin 噪声函数: https://github.com/ashima/webgl-noise/tree/master/src. 。这应该适用于 iPhone。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top