【发布时间】:2023-12-26 20:04:01
【问题描述】:
我试图了解 Three.js 中的阴影,我找到了this nice example in jsfiddle。 但是我不明白为什么,当我将光的 y 降低到 65 时,就是:
light.position.set( 20, 65, 0 );
阴影完全消失。 同时,70以上的一切都很好,阴影也投射出来了。像往常一样,我可能遗漏了一些明显的东西,但我真的看不出是什么阻止了光线形成阴影。
【问题讨论】:
我试图了解 Three.js 中的阴影,我找到了this nice example in jsfiddle。 但是我不明白为什么,当我将光的 y 降低到 65 时,就是:
light.position.set( 20, 65, 0 );
阴影完全消失。 同时,70以上的一切都很好,阴影也投射出来了。像往常一样,我可能遗漏了一些明显的东西,但我真的看不出是什么阻止了光线形成阴影。
【问题讨论】:
发生这种情况是因为阴影只会被light.shadowCamera 的截锥体内部的对象投射并投射到其上;在这种情况下,默认的light.shadowCameraNear 似乎设置为大约50,因此视锥体开始时离光源太远,并且当灯光的position.y 位于65 时,该条不包括在内。当灯光的position.y 为70 时,shadowCamera 平截头体的最近边缘向上移动以包括条形,并且阴影被正确投射。
您可以通过将light.shadowCameraNear 设置为较小的数字来解决此问题。在那个小提琴中,取消注释该行:
light.shadowCameraNear = 1;
无论你将灯光移动多低,阴影都会出现。
【讨论】:
你可以试试:
light.shadowCameraVisible = true;
要查看屏幕上灯光的位置和方向,这将帮助您了解发生了什么变化。
希望对你有帮助:)
【讨论】: