【问题标题】:three.js: make texture zero outside boundariesthree.js:使纹理在边界外为零
【发布时间】:2019-12-17 22:45:40
【问题描述】:

目前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.3 时超出了界限,然后可以测试它是否在界限内,如果不是则返回/设置 0?。

标签: javascript three.js


【解决方案1】:

在您的着色器中检查纹理坐标

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

【讨论】:

    猜你喜欢
    • 2013-05-08
    • 2019-07-31
    • 2019-08-22
    • 2011-12-16
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    相关资源
    最近更新 更多