Javascript ThreeJS-作用类似聚光灯的点光源阴影

Javascript ThreeJS-作用类似聚光灯的点光源阴影,javascript,html,three.js,Javascript,Html,Three.js,我有一个场景,有环境光和点光,我想在网格下有阴影,如图所示,但在中心部分周围有一个阴影区域 看起来点光源正在投射阴影,就好像它是聚光灯一样。 如果我减小light.position.z的值,灰色区域会消失,但阴影的位置会改变(它们不再位于网格下) 我对代码进行了修改: 如何在不缩短距离的情况下消除圆周围的灰色区域? 我能用平行光照吗? 为什么我在平行光下看不到任何阴影 谢谢大家! 方向阴影使用正交投影,这需要适当的窗口。从-5到5的默认窗口不会覆盖整个场景。添加 light.shadow.ca

我有一个场景,有环境光和点光,我想在网格下有阴影,如图所示,但在中心部分周围有一个阴影区域

看起来点光源正在投射阴影,就好像它是聚光灯一样。 如果我减小
light.position.z
的值,灰色区域会消失,但阴影的位置会改变(它们不再位于网格下)

我对代码进行了修改:

如何在不缩短距离的情况下消除圆周围的灰色区域? 我能用平行光照吗? 为什么我在平行光下看不到任何阴影


谢谢大家!

方向阴影使用正交投影,这需要适当的窗口。从-5到5的默认窗口不会覆盖整个场景。添加

light.shadow.camera.left = -300
light.shadow.camera.top = -300
light.shadow.camera.right = 300
light.shadow.camera.bottom = 300
使阴影在使用平行光时显示

至于点阴影被剪裁的原因,这似乎是three.js中的一个bug,与以下内容有关:


“缩放”参数将所有对象置于距离点光源1000个单位以上的阴影中。其他阴影类型直接使用阴影空间中的投影坐标获得深度,因此它们没有溢出问题。用
聚光灯
代替
聚光灯
“修复”了问题。为什么点光源是这样实现的?不知道。正确的方法是向three.js发布一个问题。

非常感谢!!那很有效!你提出问题了吗?我可以做,但我认为如果你像你看起来比我知道得多那样做会更好:)好吧,你知道什么:)
    // dp = distance from light to fragment position
    float dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;