我在GLSL中有一个径向模糊着色器,它采用纹理,对其进行径向模糊,并将结果呈现给屏幕.这个工作很好,到目前为止.

问题在于,它将径向模糊应用于场景中的第一个纹理.但是我实际上想做的就是将这个模糊应用于整个场景.

实现此功能的最佳方式是什么?我可以只使用着色器,还是先将场景渲染到纹理(在OpenGL中),然后将这个纹理传递给着色器进行进一步处理?

// Vertex shader

varying vec2 uv;

void main(void)

{

gl_Position = vec4( gl_Vertex.xy, 0.0, 1.0 );

gl_Position = sign( gl_Position );

uv = (vec2( gl_Position.x, - gl_Position.y ) + vec2(1.0) ) / vec2(2.0);

}

// Fragment shader

uniform sampler2D tex;

varying vec2 uv;

const float sampleDist = 1.0;

const float sampleStrength = 2.2;

void main(void)

{

float samples[10];

samples[0] = -0.08;

samples[1] = -0.05;

samples[2] = -0.03;

samples[3] = -0.02;

samples[4] = -0.01;

samples[5] = 0.01;

samples[6] = 0.02;

samples[7] = 0.03;

samples[8] = 0.05;

samples[9] = 0.08;

vec2 dir = 0.5 - uv;

float dist = sqrt(dir.x*dir.x + dir.y*dir.y);

dir = dir/dist;

vec4 color = texture2D(tex,uv);

vec4 sum = color;

for (int i = 0; i < 10; i++)

sum += texture2D( tex, uv + dir * samples[i] * sampleDist );

sum *= 1.0/11.0;

float t = dist * sampleStrength;

t = clamp( t ,0.0,1.0);

gl_FragColor = mix( color, sum, t );

}

openglshader实现虚拟场景_opengl – 如何使用GLSL着色器将径向模糊应用于整个场景?...相关推荐

  1. GLSL着色器周记02

    GLSL着色器周记02 来源:网络    编辑:admin 这周学了好多.包括伪随机数.柏林噪声. 先说伪随机数.伪随机数我们用的是周期函数而不是那种由前一项乘一个超大的数取余数的方法.使用周期函数的 ...

  2. HLSL CG 与glsl着色器编译及其原理

    导言:公司旧的渲染引擎用的结构无语了,要写一个渲染特效现在Unity 用shaderlab实现调试好,Unity插件导出GLTF格式(shader等已经包含在材质信息中),然后再导到自研引擎(用的OP ...

  3. GLSL着色器的正确文件扩展名是什么?

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一.glslangValidator.exe工具使用 二.着色器程序后缀名 前言 我正在学习glsl着色,我遇到了不同的文件格式.我 ...

  4. [GLSL]着色器周记02——火焰特效

    这周学了好多.包括伪随机数.柏林噪声. 先说伪随机数.伪随机数我们用的是周期函数而不是那种由前一项乘一个超大的数取余数的方法.使用周期函数的好处就是可以让其随时间均匀变化.不过使用周期函数一定要保证周 ...

  5. GLSL着色器实现多重纹理与帧缓冲对象(FBO)

    还记得我前面几篇博客上写的东西都是将纹理直接渲染到屏幕上,就是产生一个和纹理尺寸大小相同的窗口进行渲染,那么渲染完了就正好完整的显示了纹理图案.但是在做数值计算的时候,一般是不需要输出到屏幕上的,这就 ...

  6. OpenGLES2.0着色器语言glsl

    OpenGLES2.0中是强制使用可编程的渲染管线的,使用的是glsl着色器语言,因为着色器语言是使用的GPU,即图形处理单元,而不是CPU,这样可以使CPU从繁重的几何计算和像素的处理中解脱出来了. ...

  7. 第四章:缓冲区、着色器、GLSL

    原文链接: http://www.rastertek.com/gl40tut04.html Tutorial 4: Buffers, Shaders, and GLSL 第四章:缓冲区.着色器.GLS ...

  8. OpenGL着色器GLSL

    OpenGL着色器 OpenGL着色器简介 GLSL 数据类型 向量 输入与输出 顶点着色器 片段着色器 Uniform 更多属性 我们自己的着色器类 从文件读取 OpenGL着色器简介 着色器(Sh ...

  9. 采用光线跟踪绘制场景 c++_虚拟演播室的跟踪系统以及色键器应要选择什么型号...

    真三维虚拟演播室设备 系统简介 Diblue-VS系列三维虚拟演播室系统,是历经市场考验和洗礼的迪蓝虚拟产品中的经典款,广受海内外用户的喜爱和好评.Diblue-VS系列三维虚拟演播室系统界面直观.简 ...

最新文章

  1. 使用pytz模块进行时区转换及时间计算
  2. 基础设备----笔记
  3. # CF1572B Xor of 3(构造)
  4. Docker学习总结(35)——Docker全面认识再总结
  5. 【部署问题】解决Nginx: [error] open() "/usr/local/Nginx/logs/Nginx.pid“ failed(2:No such file or directory)
  6. Delphi常用字符串函数
  7. Redis11-AOF持久化
  8. centos7系统下postgresql12离线安装
  9. NetApp收购Data Domain 当上冤大头?
  10. 摄像头录像软件测试初学者,几款好用的摄像头视频捕获工具推荐
  11. golang算法—— 使用两个栈实现一个队列
  12. linux在命令行下打开pdf文件
  13. 微信小程序请求接口提示Provisional headers are shown
  14. 国税服务器反回文件错误,电子税务局常见问题解答电子税务局异常转办(一).pdf...
  15. html的color粉颜色,HTML颜色一览(color)
  16. matlab对照片进行磨皮美白,人像照片快速磨皮美白处理的PS技巧
  17. 稳健收益,缺你不可—A股优秀的基金和基金经理
  18. 手机WIFI拦截器简单实现
  19. 测量小助手——典型用户及使用场景
  20. 从拼多多回应“商家二选一声明”看其竞争“平常心”

热门文章

  1. OpenStack已死?恐怕你想多了 | 技术头条
  2. linux 开机启动设置密码,Linux下Redis设置密码及开机自启动
  3. 安卓开发替换json字符串中的数据_22个JavaScript开发技巧合集
  4. python vlookup 模糊_如何用python写excel中的vlookup函数?
  5. xp正版验证补丁_实操web漏洞验证——IIS HTTP.sys 整数溢出漏洞
  6. 二阶振荡环节的谐振频率_自动控制系统时域分析十三:对数频率特性
  7. flowable 数据库表结构 梳理
  8. python方法定义..._解析Python类中的方法定义
  9. 利用python做一个小游戏_如何使用python做一个简单的猜数字的小游戏
  10. C语言 NULL 和 0 区别 - C语言零基础入门教程