我想创建一个iPhone上的动画Perlin杂,所以我最终可以做这样的事情:http://dl.dropbox.com/u/1977230/example.png如何生成柏林噪声在iPhone
我看了又看,却找不到任何东西类似或实际显示佩林噪声的方法。
我被告知要查看OpenGL ES,但即使搜索Perlin噪声或熔岩/等离子体效应的示例也不会导致任何结果。
我真的很感谢这一个帮助。
谢谢你们, 安德烈
我想创建一个iPhone上的动画Perlin杂,所以我最终可以做这样的事情:http://dl.dropbox.com/u/1977230/example.png如何生成柏林噪声在iPhone
我看了又看,却找不到任何东西类似或实际显示佩林噪声的方法。
我被告知要查看OpenGL ES,但即使搜索Perlin噪声或熔岩/等离子体效应的示例也不会导致任何结果。
我真的很感谢这一个帮助。
谢谢你们, 安德烈
嗯,首先研究柏林噪声算法本身。 http://en.wikipedia.org/wiki/Perlin_noise看起来只是最好的起飞地点。
一旦你得到了你的这种效果的RGBA数据,这个讨厌的事情就开始了。
基本上有两种选择。
创建一个UIView子类并重写绘制:(CGRect)方法。明智地使用Converting RGB data into a bitmap in Objective-C++ Cocoa从您的数据创建一个CGImage,然后将该图像绘制到当前绘制的上下文中。
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 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的开源项目,它可以用于生成柏林噪声。它支持完整的四维(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。
我明白了。感谢那。 我仍然无法相信Objective-C/OpenGL ES中没有Perlin Noise的版本...... – Andre 2010-04-07 10:31:30
c函数和C++类可以在objc中使用。 – f3r3nc 2010-04-07 10:58:42