我正在尝试编写一个片段着色器,但遇到了困难。这是我第二次编写着色器,所以我很新,几乎可以确定我只是没有正确处理数据类型,这就是错误的根源,但是我无论如何都不能解决它。目标是能够将纹理传递给函数,以便我可以一遍又一遍地调用它...任何帮助都将不胜感激! 我得到的错误是:error C1115: 无法找到兼容的重载函数"texture2D(vec3, vec2)"。
uniform sampler2D image;
uniform float radius;
uniform float adsk_result_w, adsk_result_h;
vec2 iResolution = vec2(adsk_result_w, adsk_result_h);
vec2 uv=(gl_FragCoord.xy/iResolution.xy);
vec2 vTexCoord = (gl_FragCoord.xy/iResolution.xy);
float blurSize = radius/iResolution;
vec4 hblur(vec4 frontin ) {
vec3 RTScene = frontin.rgb;
vec4 sum = vec4(0.0);
sum += texture2D(RTScene, vec2(vTexCoord.x - 4.0*blurSize, vTexCoord.y)) * 0.05;
sum += texture2D(RTScene, vec2(vTexCoord.x - 3.0*blurSize, vTexCoord.y)) * 0.09;
sum += texture2D(RTScene, vec2(vTexCoord.x - 2.0*blurSize, vTexCoord.y)) * 0.12;
sum += texture2D(RTScene, vec2(vTexCoord.x - blurSize, vTexCoord.y)) * 0.15;
sum += texture2D(RTScene, vec2(vTexCoord.x, vTexCoord.y)) * 0.16;
sum += texture2D(RTScene, vec2(vTexCoord.x + blurSize, vTexCoord.y)) * 0.15;
sum += texture2D(RTScene, vec2(vTexCoord.x + 2.0*blurSize, vTexCoord.y)) * 0.12;
sum += texture2D(RTScene, vec2(vTexCoord.x + 3.0*blurSize, vTexCoord.y)) * 0.09;
sum += texture2D(RTScene, vec2(vTexCoord.x + 4.0*blurSize, vTexCoord.y)) * 0.05;
return vec4(sum);
}
void main() {
vec4 front = texture2D(image, uv);
vec4 work = hblur(front);
gl_FragColor = vec4(work);
}
pass1
是一个vec4
而不是一个sampler2D
。当你想要进行高斯模糊时,你还需要先进行两次模糊,例如水平方向和垂直方向,或者反过来。 - t.niese