如何在 iPhone 上生成柏林噪声
-
24-09-2019 - |
题
我想在 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。