IOS – OpenGL ES 圖像柏林噪點/花邊噪點 GPUImagePerlinNoiseFilter

来源:https://www.cnblogs.com/shuopython/archive/2022/06/13/16372347.html
-Advertisement-
Play Games

目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...


目錄

零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎

零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場

零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 特效

零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 函數

零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES GPUImage 使用

零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES GLSL 編程

一.簡介

GPUImage 共 125 個濾鏡, 分為四類

1、Color adjustments : 31 filters , 顏色處理相關
2、Image processing : 40 filters , 圖像處理相關.
3、Blending modes : 29 filters , 混合模式相關.
4、Visual effects : 25 filters , 視覺效果相關.

GPUImagePerlinNoiseFilter 屬於 GPUImage 圖像視覺效果相關,用來處理圖像柏林噪點/花邊噪點。shader 源碼如下:

/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:IOS – OpenGL ES 圖像柏林噪點/花邊噪點 GPUImagePerlinNoiseFilter
//@Time:2022/06/08 06:30
//@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
/******************************************************************************************/

#if TARGET_IPHONE_SIMULATOR || TARGET_OS_IPHONE
NSString *const kGPUImagePerlinNoiseFragmentShaderString = SHADER_STRING
(
 precision highp float;
 varying highp vec2 textureCoordinate;
 uniform float scale;

 uniform vec4 colorStart;
 uniform vec4 colorFinish;

 //
 // Description : Array and textureless GLSL 2D/3D/4D simplex
 // noise functions.
 // Author : Ian McEwan, Ashima Arts.
 // Maintainer : ijm
 // Lastmod : 20110822 (ijm)
 // License : Copyright (C) 2011 Ashima Arts. All rights reserved.
 // Distributed under the MIT License. See LICENSE file.
 // https://github.com/ashima/webgl-noise
 //

 vec4 mod289(vec4 x)
{
    return x - floor(x * (1.0 / 289.0)) * 289.0;
}

 vec4 permute(vec4 x)
{
    return mod289(((x*34.0)+1.0)*x);
}

 vec4 taylorInvSqrt(vec4 r)
{
    return 1.79284291400159 - 0.85373472095314 * r;
}

 vec2 fade(vec2 t) {
     return t*t*t*(t*(t*6.0-15.0)+10.0);
 }

 // Classic Perlin noise
 float cnoise(vec2 P)
{
    vec4 Pi = floor(P.xyxy) + vec4(0.0, 0.0, 1.0, 1.0);
    vec4 Pf = fract(P.xyxy) - vec4(0.0, 0.0, 1.0, 1.0);
    Pi = mod289(Pi); // To avoid truncation effects in permutation
    vec4 ix = Pi.xzxz;
    vec4 iy = Pi.yyww;
    vec4 fx = Pf.xzxz;
    vec4 fy = Pf.yyww;

    vec4 i = permute(permute(ix) + iy);

    vec4 gx = fract(i * (1.0 / 41.0)) * 2.0 - 1.0 ;
    vec4 gy = abs(gx) - 0.5 ;
    vec4 tx = floor(gx + 0.5);
    gx = gx - tx;

    vec2 g00 = vec2(gx.x,gy.x);
    vec2 g10 = vec2(gx.y,gy.y);
    vec2 g01 = vec2(gx.z,gy.z);
    vec2 g11 = vec2(gx.w,gy.w);

    vec4 norm = taylorInvSqrt(vec4(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11)));
    g00 *= norm.x;
    g01 *= norm.y;
    g10 *= norm.z;
    g11 *= norm.w;

    float n00 = dot(g00, vec2(fx.x, fy.x));
    float n10 = dot(g10, vec2(fx.y, fy.y));
    float n01 = dot(g01, vec2(fx.z, fy.z));
    float n11 = dot(g11, vec2(fx.w, fy.w));

    vec2 fade_xy = fade(Pf.xy);
    vec2 n_x = mix(vec2(n00, n01), vec2(n10, n11), fade_xy.x);
    float n_xy = mix(n_x.x, n_x.y, fade_xy.y);
    return 2.3 * n_xy;
}


 void main()
 {

     float n1 = (cnoise(textureCoordinate * scale) + 1.0) / 2.0;

     vec4 colorDiff = colorFinish - colorStart;
     vec4 color = colorStart + colorDiff * n1;

     gl_FragColor = color;
 }
);
#else
NSString *const kGPUImagePerlinNoiseFragmentShaderString = SHADER_STRING
(
 varying vec2 textureCoordinate;
 uniform float scale;

 uniform vec4 colorStart;
 uniform vec4 colorFinish;

 //
 // Description : Array and textureless GLSL 2D/3D/4D simplex
 // noise functions.
 // Author : Ian McEwan, Ashima Arts.
 // Maintainer : ijm
 // Lastmod : 20110822 (ijm)
 // License : Copyright (C) 2011 Ashima Arts. All rights reserved.
 // Distributed under the MIT License. See LICENSE file.
 // https://github.com/ashima/webgl-noise
 //

 vec4 mod289(vec4 x)
{
    return x - floor(x * (1.0 / 289.0)) * 289.0;
}

 vec4 permute(vec4 x)
{
    return mod289(((x*34.0)+1.0)*x);
}

 vec4 taylorInvSqrt(vec4 r)
{
    return 1.79284291400159 - 0.85373472095314 * r;
}

 vec2 fade(vec2 t) {
     return t*t*t*(t*(t*6.0-15.0)+10.0);
 }

 // Classic Perlin noise
 float cnoise(vec2 P)
{
    vec4 Pi = floor(P.xyxy) + vec4(0.0, 0.0, 1.0, 1.0);
    vec4 Pf = fract(P.xyxy) - vec4(0.0, 0.0, 1.0, 1.0);
    Pi = mod289(Pi); // To avoid truncation effects in permutation
    vec4 ix = Pi.xzxz;
    vec4 iy = Pi.yyww;
    vec4 fx = Pf.xzxz;
    vec4 fy = Pf.yyww;

    vec4 i = permute(permute(ix) + iy);

    vec4 gx = fract(i * (1.0 / 41.0)) * 2.0 - 1.0 ;
    vec4 gy = abs(gx) - 0.5 ;
    vec4 tx = floor(gx + 0.5);
    gx = gx - tx;

    vec2 g00 = vec2(gx.x,gy.x);
    vec2 g10 = vec2(gx.y,gy.y);
    vec2 g01 = vec2(gx.z,gy.z);
    vec2 g11 = vec2(gx.w,gy.w);

    vec4 norm = taylorInvSqrt(vec4(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11)));
    g00 *= norm.x;
    g01 *= norm.y;
    g10 *= norm.z;
    g11 *= norm.w;

    float n00 = dot(g00, vec2(fx.x, fy.x));
    float n10 = dot(g10, vec2(fx.y, fy.y));
    float n01 = dot(g01, vec2(fx.z, fy.z));
    float n11 = dot(g11, vec2(fx.w, fy.w));

    vec2 fade_xy = fade(Pf.xy);
    vec2 n_x = mix(vec2(n00, n01), vec2(n10, n11), fade_xy.x);
    float n_xy = mix(n_x.x, n_x.y, fade_xy.y);
    return 2.3 * n_xy;
 }

 void main()
 {

     float n1 = (cnoise(textureCoordinate * scale) + 1.0) / 2.0;

     vec4 colorDiff = colorFinish - colorStart;
     vec4 color = colorStart + colorDiff * n1;

     gl_FragColor = color;
 }
);
#endif

二.效果演示

使用GPUImagePerlinNoiseFilter 完成**圖像柏林噪點/花邊噪點******

三.源碼下載

OpenGL ES Demo 下載地址 : IOS – OpenGL ES 圖像柏林噪點/花邊噪點 GPUImagePerlinNoiseFilter

四.猜你喜歡

  1. IOS – OPenGL ES 設置圖像亮度 GPUImageBrightnessFilter
  2. IOS – OPenGL ES 調節圖像曝光度 GPUImageExposureFilter
  3. IOS – OpenGL ES 調節圖像對比度 GPUImageContrastFilter
  4. IOS – OPenGL ES 調節圖像飽和度 GPUImageSaturationFilter
  5. IOS – OPenGL ES 調節圖像伽馬線 GPUImageGammaFilter
  6. IOS – OpenGL ES 調節圖像反色 GPUImageColorInvertFilter
  7. IOS – OpenGL ES 調節圖像褐色 GPUImageSepiaFilter
  8. IOS – OpenGL ES 調節圖像灰色 GPUImageGrayscaleFilter
  9. IOS – OpenGL ES 調節圖像 RGB 通道 GPUImageRGBFilter
  10. IOS – OpenGL ES 調節圖像不透明度 GPUImageOpacityFilter
  11. IOS – OpenGL ES 調節圖像陰影 GPUImageHighlightShadowFilter
  12. IOS – OpenGL ES 調節圖像色彩替換 GPUImageFalseColorFilter
  13. GPUImage – 色彩直方圖 GPUImageHistogramFilter
  14. GPUImage – 色彩直方圖 GPUImageHistogramGenerator
  15. GPUImage – 像素平均色值 GPUImageAverageColor
  16. GPUImage – 亮度平均 GPUImageLuminosity
  17. IOS – OpenGL ES 調節圖像色度 GPUImageHueFilter
  18. IOS – OpenGL ES 指定顏色摳圖 GPUImageChromaKeyFilter
  19. IOS – OpenGL ES 調節圖像白平衡/色溫 GPUImageWhiteBalanceFilter
  20. IOS – OpenGL ES 設置圖像 lookup 濾鏡 GPUImageLookupFilter
  21. IOS – OpenGL ES 設置圖像濾鏡 GPUImageAmatorkaFilter
  22. IOS – OpenGL ES 設置圖像濾鏡 GPUImageSoftEleganceFilter
  23. IOS – OpenGL ES 設置圖像銳化 GPUImageSharpenFilter
  24. IOS – OpenGL ES 繪製十字 GPUImageCrosshairGenerator
  25. IOS – OpenGL ES 繪製線條 GPUImageLineGenerator
  26. IOS – OpenGL ES 設置圖像黑白燥點 GPUImageLocalBinaryPatternFilter
  27. IOS – OpenGL ES 設置圖像卡通效果(黑色粗線描邊) GPUImageToonFilter
  28. IOS – OpenGL ES 桑原濾波/水粉畫模糊效果 GPUImageKuwaharaFilter
  29. IOS – OpenGL ES 黑白馬賽克效果 GPUImageMosaicFilter
  30. IOS – OpenGL ES 像素化馬賽克效果 GPUImagePixellateFilter
  31. IOS – OpenGL ES 同心圓像素化馬賽克效果 GPUImagePolarPixel
  32. IOS – OpenGL ES 黑白網狀效果 GPUImageCrosshatchFilter
  33. IOS – OpenGL ES 色彩丟失/模糊效果 GPUImageColorPackingFilter
  34. IOS – OpenGL ES 圖像暈影 GPUImageVignetteFilter
  35. IOS – OpenGL ES 圖像漩渦 GPUImageSwirlFilter
  36. IOS – OpenGL ES 圖像魚眼擴散效果 GPUImageBulgeDistortionFilter
  37. IOS – OpenGL ES 圖像魚眼移動效果 GPUImageBulgeDistortionFilter
  38. IOS – OpenGL ES 圖像凹面鏡移動效果 GPUImagePinchDistortionFilter
  39. IOS – OpenGL ES 圖像凹面鏡放大效果 GPUImagePinchDistortionFilter
  40. IOS – OpenGL ES 圖像哈哈鏡效果 GPUImageStretchDistortionFilter
  41. IOS – OpenGL ES 圖像水晶球效果 GPUImageGlassSphereFilter
  42. IOS – OpenGL ES 圖像球形折射 GPUImageSphereRefractionFilter
  43. IOS – OpenGL ES 圖像色調分離噪點效果 GPUImagePosterizeFilter
  44. IOS – OpenGL ES 圖像 CGA 色彩濾鏡 GPUImageCGAColorspaceFilter
  45. IOS – OpenGL ES 圖像柏林噪點/花邊噪點 GPUImagePerlinNoiseFilter

本文由博客 - 猿說編程 猿說編程 發佈!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、問題描述 使得填表單位那一行字與下麵的表格左對齊,對錶格使用css中的margin:auto實現了居中,但是對那一行字(用div包裹的)使用margin:auto不生效;並且2021年下麵對應的月份是動態變化的,月份的個數不定; 二、解決方案 (1)把那行字放在表格裡,再把這行表格的邊框去掉; ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 對uni.request的一些共同參數進行簡單的封裝,減少重覆性數據請求代碼。方便全局調用。 先在目錄下創建 utils 和 common 這2個文件夾 utils 是存放工具類的,common 用來放置常用方法的 之後在utils 中創 ...
  • 聲明 這個程式只是用來演示查看後臺和對接後臺的原理和過程,供代碼學習參考,請勿濫用! 起因 因為上海疫情,我們所有的活動都得線上上完成,作為一個新時代好學生,我該做點什麼了。 我的學校選擇的上課平臺是希沃的立知課堂,教師端是希沃白板電腦客戶端,學生端是網頁端、微信小程式端、移動設備軟體端。 觀察後臺 ...
  • 日常開發系統中通常需要對接多個系統,需要用到適配器模式。 例如:支付方式就涉及多個系統對接。 國際慣例,先引入概念。 適配器模式: 提到適配器自然就能想到手機用的電源適配器。 他的作用就是將220V交流電轉換成手機使用的5V直流電。 適配器作用:將一個介面轉換成另外一個介面,已符合客戶的期望。 軟體 ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 算術運算符 +:正值運算符 / 加法運算符 int x = 4 + 22; -:負值運算符 / 減法運算符 int y = 61 - 23; *:乘法運算符 int num = 5; printf("%i\n", num * num); // 輸出 25 /:除法運算符 C 語言裡面的 整數除法 是 ...
  • Java 零錢通項目 項目要求:使用 Java 開發 零錢通項目 , 可以完成收益入賬,消費,查看明細,退出系統等功能。 1. 面向過程 1)首先是這樣一個菜單界面 由於不管選擇什麼,都需要至少執行一次,所以考慮do...while迴圈結構。 boolean loop = true; do { Sy ...
  • 前言 學習eureka的過程中,配置了本地多節點,發現節點間數據不同步,自己找源碼發現eureka.client.service-url.default-zone 配置有誤,default-zone應該為defaultZone,該配置配置在EurekaClientConfigBean中,如果未配置d ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...