Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript three.js中平行光的阴影范围_Javascript_Three.js - Fatal编程技术网

Javascript 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;

在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;
其中,阴影摄影机变量可以调整为创建阴影时距光源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上的介绍。