三个JS改变直射光的阴影相机的位置



我有一架巨大的飞机作为地面,我有一个方向光作为太阳光。

问题是,这个方向光源不能在所有平面上投射阴影,所以我决定让定向光源的阴影摄像机跟随主透视摄像机。

所以,这是我的代码:

camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 );
lightCameraConstant = 40;
dirLight = new THREE.DirectionalLight( 0xffffff, 1 );
dirLight.color.setHSL( 0.1, 0.5, 1 );
dirLight.position.set( 1500, 2000, 1500 );
dirLight.castShadow = true;
dirLight.shadow.mapSize.width = 4096;
dirLight.shadow.mapSize.height = 4096;
dirLight.shadow.camera.left = -lightCameraConstant;
dirLight.shadow.camera.right = lightCameraConstant;
dirLight.shadow.camera.top = lightCameraConstant;
dirLight.shadow.camera.bottom = -lightCameraConstant;
dirLight.shadow.camera.far = 3000;
dirLight.shadow.camera.near = 0.01;
dirLight.shadow.bias = -0.0001;
scene.add( dirLight );
var helper = new THREE.CameraHelper( dirLight.shadow.camera );
scene.add( helper );

然后在动画函数中,我使用以下内容:

dirLight.shadow.camera.position.x = camera.position.x;
helper.update();

但这不起作用,影子相机根本没有改变其位置。

1-如何在不改变方向的情况下更改阴影相机位置光的位置?

2-有没有办法在不使用疯狂资源的情况下覆盖大面积投射阴影?

我无法更改阴影摄像机的位置,但我找到了解决方法。

解决方法是,使用主摄像机更改整个 directLight 位置和目标位置,以使目标位置和 directLight 之间的天使保持不变。

我使用这个可以:

dirLight.position.x = camera.position.x - cameraStartPosition.x + 20 ;
dirLight.position.z = camera.position.z - cameraStartPosition.z + 20;
dirLight.target.position.set(( camera.position.x - cameraStartPosition.x),0,(camera.position.z - cameraStartPosition.z));

cameraStartPosition是相机的起始位置,因为我的相机不是从 0,0,0 开始的。其余的固定数字是我想在主相机和阴影相机之间保持的偏移量。

希望这可以帮助某人。

最简单的方法是将光目标添加到包括在内的场景中。

scene.add(light.target);

然后移动光目标和灯光

light.position.set(robot.position.x,light.position.y,robot.position.z);
light.target.position.set(robot.position.x,light.target.position.y,robot.position.z);

最新更新