Opengl es 模糊镜像着色器
有人知道如何将高斯模糊应用于镜像纹理吗? 我只想将模糊应用到一个纹理,而不是整个场景,我已经尝试过使用后处理dof 在片段着色器中,我无法确定如何模糊texture2DProj的结果。 例如,如果我有以下行:Opengl es 模糊镜像着色器,opengl-es,three.js,opengl-es-2.0,Opengl Es,Three.js,Opengl Es 2.0,有人知道如何将高斯模糊应用于镜像纹理吗? 我只想将模糊应用到一个纹理,而不是整个场景,我已经尝试过使用后处理dof 在片段着色器中,我无法确定如何模糊texture2DProj的结果。 例如,如果我有以下行: uniform sampler2D mirrorMap; varying vec4 mirrorCoord; void main(){ mColor = texture2DProj(mirrorMap, mirrorCoord); gl_FragColor = mcolor
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;
我用threejs做这个,我认为它是基于OpenGLES2.0的 哦,好的。即使没有
TextureProjectOffset(…)
,这也应该相当简单
所有textureDProj(…)
实际上都是在执行纹理查找之前,自动将前三个坐标除以第四个坐标。在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
因此,您可以用texture2D(…)
替换texture2DProj(…)
,如下所示:
然后您可以应用与原始问题相同的逻辑,因为现在您有简单的2D坐标,而不是4D齐次坐标。您知道
TextureProjectOffset(…)
存在,对吗?如果您试图进行高斯模糊,那么您需要获取一个texel窗口,然后将其传递给过滤器内核。该功能将允许您一次直接偏移1 texel,这应该是最直观的解决方案。我唯一关心的是你的OpenGL版本,这很难从你所有的标签中看出-TextureProjectOffset(…)
是在GL 3.0(GLSL 1.30)中引入的。我用的是基于OpenGL es 2.0的threejs。非常感谢你。这正是我想要的:)非常感谢。这正是我想要的:)
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;
}