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