Как сгенерировать шум Perlin на iPhone
-
24-09-2019 - |
Вопрос
Я хочу создать анимированный шум Perlin на iPhone, поэтому я могу в конечном итоге сделать что-то вроде этого: http://dl.dropbox.com/u/1977230/example.png
Я посмотрел и посмотрел, но не могу найти ничего подобного или способа на самом деле проявить шум для перлина.
Мне сказали посмотреть на OpenGL ES, но даже в поисках примера шума Perlin или эффекта лавы / плазмы не приводит к тому, что.
Я бы очень ценю некоторую помощь на этом.
Спасибо, ребята, Андре
Решение
Ну, сначала изучите саму алгоритм шума Perlin. http://en.wikipedia.org/wiki/perlin_noise. Выглядит всего лучшее место для взлета.
Как только у вас есть данные RGBA об этом эффекте вашей, начинается противное.
Существует два варианта в основном.
Создайте подкласс UIVIEW и переопределите метод Draw: (CGrect). Использовать Преобразование данных RGB в растровое изображение в Costive-C ++ Cocoa С удовольствием создать CJImage из ваших данных и нарисовать это изображение в текущий контекст в розыгрыше.
CGContextDrawImage(UIGraphicsGetCurrentContext(), <#CGRect rect#>, <#CGImageRef image#>);
Если это еще изображение, вы в порядке. Если это анимация, это может быть не лучшее решение.
Познакомьтесь с OpenGL ES на iPhone. Пример 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);
Ах, я скучаю по старому добру видео на $ 000 дней :)
Другие советы
Я начал проект с открытым исходным кодом на GitHub, который вы можете использовать для генерации шума Perlin. Он поддерживает полную 4-мерную (X, Y, Z, T) General Perlin. Он также включает в себя проект с приложением песочницы для игры с идеями текстуры. http://czgarrett.com/code/2011/05/18/perlin-noise-generator-for-ios.html.
Теперь есть еще одна функция шума Perlin для GLSL-шейдера, которая не требует текстур поиска: https://github.com/ashima/webgl-noise/tree/master/src.. Отказ Это должно работать на iPhone.