有谁知道如何将Guassian Blur应用于镜面纹理? 我只是想将模糊应用于一个纹理,而不是我已经尝试过后处理dof的整个场景。
在我的片段着色器中,我无法弄清楚如何模糊texture2DProj的结果。 例如,如果我有以下行:
uniform sampler2D mirrorMap;
varying vec4 mirrorCoord;
void main(){
mColor = texture2DProj(mirrorMap, mirrorCoord);
gl_FragColor = mcolor;
}
我怎样才能做类似以下的事情:
vec4 sum = vec4( 0.0 );
float v = 1.0 / 250.0 ;
sum += texture2D( baseTexture, vec2( vUv.x, vUv.y - 4.0 * v ) ) * 0.051;
sum += texture2D( baseTexture, vec2( vUv.x, vUv.y - 3.0 * v ) ) * 0.0918;
..etc
gl_FragColor = sum;
答案 0 :(得分:1)
我正在使用threejs,我认为这是基于opengl es 2.0。
哦,好的。即使没有textureProjOffset (...)
,这也应该相当简单。
所有texture<1|2|3>DProj (...)
实际上都是在进行纹理查找之前自动将前三个坐标除以4 th 坐标。在texture2DProj
的情况下,这意味着:
st' = (stpq.s / stpq.q, stpq.t / stpq.q)
// The input coordinates had a 3rd coordinate but it's not used for anything in 2D
texture2DProj (...)
替换为texture2D (...)
,如下所示:uniform sampler2D mirrorMap;
varying vec4 mirrorCoord;
void main(){
vec2 unproj2D = vec2 (mirrorCoord.s / mirrorCoord.q,
mirrorCoord.t / mirrorCoord.q);
mColor = texture2D(mirrorMap, unproj2D);
gl_FragColor = mcolor;
}
然后您可以应用与原始问题中相同的逻辑,因为现在您拥有简单的2D坐标而不是4D齐次坐标。