gpt4 book ai didi

iphone - 如何在 iPhone 上生成柏林噪声

转载 作者:可可西里 更新时间:2023-11-01 05:01:36 25 4
gpt4 key购买 nike

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

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

我被告知要查看 OpenGL ES,但即使搜索 Perlin 噪声或熔岩/等 ionic 效果的示例也没有任何结果。

如果能在这方面提供帮助,我将不胜感激。

谢谢大家,安德烈

最佳答案

嗯,先研究Perlin Noise算法本身。 http://en.wikipedia.org/wiki/Perlin_noise看起来是起飞的最佳地点。

一旦你有了这个效果的 RGBA 数据,讨厌的事情就开始了。

基本上有两种选择。

  • 创建一个 UIView 子类并覆盖 draw:(CGRect) 方法。使用 Converting RGB data into a bitmap in Objective-C++ Cocoa明智地从您的数据创建 CGImage 并将该图像绘制到 draw 中的当前上下文。

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

    如果这是静止图像,你没问题。如果是动画,这可能不是最佳解决方案。

  • 熟悉 iPhone 上的 OpenGL ES。iPhone SDK 的 OpenGL ES 示例是一个很好的起点。研究纹理映射。一旦您熟悉了 glTexImage2D,就可以使用它来加载您的图像。

    可以使用以下内容轻松扩展该示例:

    有这些定义:

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

    然后在 ESRenderer 初始化方法中为纹理创建空间:

    - (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 days :)

关于iphone - 如何在 iPhone 上生成柏林噪声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2584250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com