openglshader实现虚拟场景_opengl – 如何使用GLSL着色器将径向模糊应用于整个场景?...
我在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着色器将径向模糊应用于整个场景?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 红旗linux修改个人密码,LINUX红
- 下一篇: 建设银行卡锁了怎么办