OPENGL---Ps 径向模糊算法(glsl)

本文转载自:  http://blog.csdn.net/zx6733090/article/details/40311689

功能本人之前也介绍过,但是这里转载,是因为这个版本是Opengl实现的,大家可以看一下,也可以顺便学习一下Opengl。

Opengl 实现径向模糊,可用于实现放射性效果:

#ifdef GL_ES
precision mediump float;
#endif

uniform vec2 centerpos;
uniform float GlowRange; 
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
void main()                      
{    
    vec4 clraverge=vec4(0,0,0,0);   
    float range=GlowRange,count=0,x1,y1;
 vec2 cpos=centerpos;    
    for( float j = 1; j<=range ; j += 1 )  
 {
    if(cpos.x-v_texCoord.x==0)
    {
       x1=v_texCoord.x;
    y1=v_texCoord.y+(cpos.y-v_texCoord.y)*j/(6*range);
    }
    else
   {
   float k=(cpos.y-v_texCoord.y)/(cpos.x-v_texCoord.x);
      x1=v_texCoord.x+(cpos.x-v_texCoord.x)*j/200;
         if((cpos.x-v_texCoord.x)*(cpos.x-x1)<0) x1=cpos.x;
   y1=cpos.y-cpos.x*k+k*x1;
   if(x1<0.0||y1<0.0||x1>1.0||y1>1) 
   {
     continue;
   }
   }
 clraverge+=texture2D( CC_Texture0, vec2(x1,y1) );
 count+=1;
 }
 clraverge/=count;
    gl_FragColor =clraverge;
}

centerpos为径向中心点,GlowRange为径向范围。其基本思想是模糊沿着中心点向外一条直线上的点,采样值可以自己确定,效果 好就ok了、、~

效果图:

时间: 2024-12-15 01:33:00

OPENGL---Ps 径向模糊算法(glsl)的相关文章

PS 滤镜算法原理 ——马赛克

% method : 利用邻域的任意一点代替当前邻域所有像素点 %%%% mosaic clc; clear all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); Image=imread('4.jpg'); Image=double(Image); size_info=size(Image); height=size_info(1); width=size_info(2); N=11;   % 控制邻域大小

PS 滤镜算法原理——照亮边缘

这个算法原理很简单,对彩色图像的R,G,B 三个通道,分别求梯度,然后将梯度值作为三个通道的值. clc; clear all; Image=imread('4.jpg'); Image=double(Image); R=Image(:,:,1); G=Image(:,:,2); B=Image(:,:,3); R_Gradient=Find_Gradient(R); G_Gradient=Find_Gradient(G); B_Gradient=Find_Gradient(B); Image_

PS 滤镜算法原理——浮雕效果

clc; clear all; Image=imread('4.jpg'); Image=double(Image); R=Image(:,:,1); G=Image(:,:,2); B=Image(:,:,3); p=3;  %% 控制浮雕的强度 %% 控制浮雕的方向 H=[0 0 p 0 0 0 -p 0 0]; Image_new=imfilter(Image,H,'conv')+128; figure, imshow(Image_new/255); 原图 效果图 PS 滤镜算法原理--浮

【转载】OpenGL超级宝典笔记——GLSL语言基础

变量 GLSL的变量命名方式与C语言类似.变量的名称可以使用字母,数字以及下划线,但变量名不能以数字开头,还有变量名不能以gl_作为前缀,这个是GLSL保留的前缀,用于GLSL的内部变量.当然还有一些GLSL保留的名称是不能够作为变量的名称的. 基本类型 除了布尔型,整型,浮点型基本类型外,GLSL还引入了一些在着色器中经常用到的类型作为基本类型.这些基本类型都可以作为结构体内部的类型.如下表: 类型 描述 void 跟C语言的void类似,表示空类型.作为函数的返回类型,表示这个函数不返回值.

PS 滤镜算法原理——曝光过度

这个算法的原理,就是将图像反相,然后分别比较原图与反相后的图三个通道的大小,将小的值输出. clc; clear all; Image=imread('4.jpg'); Image=double(Image); Image_inverse=255-Image; [row,col,layer]=size(Image); Image_new=Image; for i=1:row for j=1:col Image_new(i,j,1)=min(Image(i,j,1),Image_inverse(i

PS 滤镜算法原理——碎片效果

%%% Fragment %%% 对原图做四个方向的平移.然后对平移的结果取平均 %%% 碎片效果 clc; clear all; Image=imread('4.jpg'); Image=double(Image)/255; [row,col,k]=size(Image); Image1=Image; Image2=Image; Image3=Image; Image4=Image; Offset=5; %%% 左移 Image1(:,1:col-Offset,:)=Image(:,1+Off

OpenCV——PS滤镜算法之Spherize 球面化(凸出效果)

// define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include <iostream> #include <string> #include "cv.h" #include "highgui.h" #include "cxmat.hpp" #include "cxcore.hpp&quo

OpenCV——PS滤镜算法之 球面化 (凹陷效果)

// define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include <iostream> #include <string> #include "cv.h" #include "highgui.h" #include "cxmat.hpp" #include "cxcore.hpp&quo

PS 滤镜算法原理——拼贴

%%%% Tile %%%%% 实现拼贴效果 %%%%% 将原图像进行分块,然后让图像块在 %%%%% 新图像范围内进行随机移动,确定移动后的边界 %%%%% 将移动后的图像块填入新图像内 clc; clear all; close all; Image=imread('4.jpg'); Image1=double(Image); Image2=Image1; Image2(:,:,1)=0; Image2(:,:,2)=0; Image2(:,:,3)=0; %%%% 块数 (1-99) N=