【发布时间】:2016-01-15 04:21:18
【问题描述】:
在 three.js 中,定向光源的阴影计算范围是基于从定向光源发出的边界框定义的。因此,如果我希望限制计算阴影的距离,我会限制边界框的几何形状。比如:
var directionalLight = new THREE.DirectionalLight( 0xffffff );
directionalLight.position.set( 50, 50, 50 );
directionalLight.intensity = 0.5;
directionalLight.castShadow = true;
directionalLight.shadowCameraLeft = -10;
directionalLight.shadowCameraRight = 10;
directionalLight.shadowCameraTop = 10;
directionalLight.shadowCameraBottom = -10;
shadowCamera 变量可以调整到距离光源 FOV 多远的地方,创建阴影。我希望这个边界框跟随用户相机,以便将阴影渲染到远离相机的设定距离。
由于边界框几何结构基于灯光相对于场景原点(或目标)的位置,因此不可能仅将边界框移动到相机所在的任何位置来创建我想要的效果。
我尝试用相机移动光源,假设边界几何体与相机的位置相关。这不起作用,因为我似乎无法为定向光设置目标,它总是试图指向原点,所以如果我改变光的位置,它本质上会改变它的方向。
例如,下面的代码什么都不做:
directionalLight.target.position.set(100,100,100);
如果上述方法可行,我理论上可以移动定向灯的位置和目标,以保持其角度恒定,并可能达到我想要的效果,但它不起作用。
任何想法如何创建阴影范围或为什么以上不起作用?
【问题讨论】:
-
使用 directionalLight.target = object 确实按照 issue 5555 中的建议工作。因此,我必须创建一个不可见的对象作为目标,并相对于相机移动它以获得所需的效果。感谢您在此处和 GitHub 上的提醒。
标签: javascript three.js