Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl es 模糊镜像着色器_Opengl Es_Three.js_Opengl Es 2.0 - Fatal编程技术网

Opengl es 模糊镜像着色器

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

有人知道如何将高斯模糊应用于镜像纹理吗? 我只想将模糊应用到一个纹理,而不是整个场景,我已经尝试过使用后处理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;

我用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;
}