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
Javascript 为什么使用贴图时扩展的THREE.MeshStandardMaterial无法显示阴影?_Javascript_Three.js_Glsl - Fatal编程技术网

Javascript 为什么使用贴图时扩展的THREE.MeshStandardMaterial无法显示阴影?

Javascript 为什么使用贴图时扩展的THREE.MeshStandardMaterial无法显示阴影?,javascript,three.js,glsl,Javascript,Three.js,Glsl,我需要一种Three.js材质,它可以让我在接收聚光灯光源的阴影时,将一种纹理交叉淡入另一种纹理 const plane = new THREE.Mesh( new THREE.PlaneGeometry(200, 200, 1, 1), new TextureFadeMaterial({ t: 0.5, map: texture1, mapDest: texture2, }) ); plane.receiveShadow

我需要一种Three.js材质,它可以让我在接收聚光灯光源的阴影时,将一种纹理交叉淡入另一种纹理

const plane = new THREE.Mesh(
    new THREE.PlaneGeometry(200, 200, 1, 1),
    new TextureFadeMaterial({
        t: 0.5,
        map: texture1,
        mapDest: texture2,
    })
);
plane.receiveShadow = true;
所以我继续“扩展”了THREE.MeshStandardMaterial,添加了制服
mapDest
(第二种纹理)和
t
(数字0..1)。我修改了
map\u片段
块,根据t的值将
map
mapDest
混合在一起

问题是,当我让它渲染纹理时,阴影就消失了。事实上,只要我把
vec4 texelColor=texture2D(map,vUv)map_片段
块(出现在负责阴影的代码之前),阴影消失了(非常奇怪,因为
texelColor
从未在这个测试用例中使用)

我想知道这是为什么

我通过将修改后的
map_片段
块移动到片段着色器的末尾(在执行灯光/阴影代码之后)使其工作

以下是最终的TextureFadeMaterial代码:

(见第156ff和187ff行)

如果您感兴趣,以下是未包装的MeshStandardMaterial片段着色器代码: