Javascript three.js中平行光的阴影范围
在three.js中,平行光的阴影计算范围是基于从平行光源发出的边界框定义的。因此,如果我希望限制阴影的计算距离,我将限制边界框的几何体。例如:Javascript three.js中平行光的阴影范围,javascript,three.js,Javascript,Three.js,在three.js中,平行光的阴影计算范围是基于从平行光源发出的边界框定义的。因此,如果我希望限制阴影的计算距离,我将限制边界框的几何体。例如: var directionalLight = new THREE.DirectionalLight( 0xffffff ); directionalLight.position.set( 50, 50, 50 ); directionalLight.intensity = 0.5; directionalLight.castShadow = true;
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;
其中,阴影摄影机变量可以调整为创建阴影时距光源FOV的距离。我希望此边界框跟随用户摄影机,以便阴影渲染到距离摄影机设定的距离
由于边界框几何体基于灯光相对于场景原点(或目标)的位置,因此不可能仅将边界框移动到相机要创建效果的任何位置
相反,我尝试使用摄影机移动光源,假设边界几何体将相对于摄影机的位置。这不起作用,因为我似乎无法为平行光设置目标,它总是试图指向原点,因此如果我更改灯光位置,它将基本上更改其方向
例如,以下内容不起任何作用:
directionalLight.target.position.set(100,100,100);
如果上述方法有效,理论上我可以移动平行光的位置和目标相对彼此,以保持其角度恒定,并可能实现我想要的,但它不起作用
有没有关于如何创建阴影范围或为什么上述操作不起作用的想法?尝试设置此标志以帮助调试:
directionalLight.shadowCameraVisible = true;
看起来您还没有控制某些参数,例如:
directionalLight.shadowCameraNear = -10;
directionalLight.shadowCameraFar = 10;
最后,我不知道你说的“什么都不做”是什么意思,因为
directionalLight.target.position.set(x, y, z);
为我移动灯光目标,所以当你打开阴影时,可拍摄的东西会变得更清晰。我希望这会有所帮助。
方向灯光。目标是灯光的属性,但它不是场景图形的一部分,因此不会更新目标的矩阵
相反,如果场景中有一个对象作为目标,则不会有问题
light.target = myObject;
three.js r.73是的,我试过directionalLight.ShadowCameravible=true;它不会为我创建一个助手。我可以创建灯光辅助对象,但阴影辅助对象不起作用。另外,我担心directionalLight.target.position.set(x,y,z);根本不为我做任何事。灯光总是指向0,0,0,正如此人所发现的:看看是否解决了您的问题。使用directionalLight.target=object确实可以像第5555期中建议的那样工作。因此,我必须创建一个不可见的对象作为目标,并将其相对于相机移动以获得所需的效果。谢谢你在这里和GitHub上的介绍。