three.js:在边界外使纹理为零

时间:2017-06-15 18:16:34

标签: javascript three.js webgl

目前在three.js中有3种包装模式:

THREE.RepeatWrapping
THREE.ClampToEdgeWrapping
THREE.MirroredRepeatWrapping

示例:

var texture = new THREE.TextureLoader().load( "textures/water.jpg" );
texture.wrapS = THREE.RepeatWrapping;
texture.wrapT = THREE.RepeatWrapping;

我在着色器中使用纹理来进行gpgpu计算,为了我的目的,我希望纹理在其边界之外为零。例如,如果使用ClampToEdge,则在纹理边界外查找值将产生边界内最近像素的颜色。在坐标(1.3,.5)处查找值将得到(1.,.5)的颜色,因为1.3对于纹理坐标来说太大了

所以我希望它在边界之外产生零,或者如果不可能,我希望能够连续地将边缘设置为零。这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:2)

在着色器中检查纹理坐标

vec4 value = vec4(0);
if (texcoord.x >= 0. || texcoord.x <= 1. ||     
    texcoord.y >= 0. || texcoord.y <= 1.) 
  value = texture2D(someSampler, texcoord);
}