سؤال

أرغب في إنشاء ضجيج Perlin المتحركة على iPhone ، لذلك يمكنني في النهاية القيام بشيء مثل هذا: http://dl.dropbox.com/u/1977230/example.png

لقد نظرت ونظرت ، لكن لا يمكنني العثور على أي شيء مشابه أو طريقة لعرض ضوضاء بيرلين بالفعل.

قيل لي أن أنظر إلى OpenGL ES ، ولكن حتى البحث عن مثال على ضوضاء Perlin أو تأثير الحمم/البلازما لا يؤدي إلى أي شيء.

أود حقًا أن أقدر بعض المساعدة في هذا.

شكرا يا رفاق ، أندريه

هل كانت مفيدة؟

المحلول

حسنا ، أول دراسة خوارزمية ضوضاء بيرلين نفسها. http://en.wikipedia.org/wiki/perlin_noise يبدو مجرد أفضل مكان للإقلاع.

بمجرد حصولك على بيانات RGBA لهذا التأثير الخاص بك ، يبدأ الشيء السيئ.

هناك خياران أساسا.

  • إنشاء فئة فرعية UIVIEW وتجاوز طريقة السحب: (CGRECT). يستخدم تحويل بيانات RGB إلى صورة نقطية في Cocoa Objective-C ++ بحكمة لإنشاء cgimage من بياناتك ورسم تلك الصورة إلى السياق الحالي في السحب.

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

    إذا كانت هذه صورة ثابتة ، فأنت بخير. إذا كان ذلك متحركًا ، فقد لا يكون هذا هو الحل الأفضل.

  • تعرف على OpenGL ES على iPhone. مثال OpenGL ES الخاص بـ iPhone SDK هو نقطة انطلاق ممتازة. دراسة رسم الخرائط الملمس. بمجرد أن تكون على دراية بـ Glteximage2D ، استخدم ذلك لتحميل صورتك.

    يمكن تمديد المثال بسهولة مع ما يلي:

    لها تعريف هذه:

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

    ثم في طريقة init 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 $ :)

نصائح أخرى

لقد بدأت مشروع مفتوح المصدر على Github يمكنك استخدامه لتوليد ضوضاء Perlin. وهو يدعم كامل الأبعاد (X ، Y ، Z ، T) جيل بيرلين. ويتضمن أيضًا مشروعًا يحتوي على تطبيق Sandbox للعب بأفكار الملمس. http://czgarrett.com/code/2011/05/18/perlin-noise-generator-for-ios.html

الآن هناك وظيفة ضوضاء Perlin أخرى لـ GLSL Shader لا تتطلب قوام بحث: https://github.com/ashima/webgl-noise/tree/master/src. هذا يجب أن يعمل على أجهزة iPhone.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top