Вопрос

Я хочу создать анимированный шум 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top