Threejs阴影问题

遇到的问题

导入glb模型,各种尝试,各种配置,死活不产生影子。

先说我的解决办法

可以先到https://threejs.org/editor/进行测试,我这里不产生因子的原因主要使阴影的设置没弄对。
首先需要使光照的影子的这个盖子足够大,
在这里插入图片描述
在这里插入图片描述
let directionalLight_1 = new THREE.DirectionalLight(0xffffff, 0.8)
directionalLight_1.castShadow = true; // default false
directionalLight_1.shadow.camera.near = 0.5; // default
directionalLight_1.shadow.camera.far = 2000; // default
directionalLight_1.shadow.camera.left = -2000
directionalLight_1.shadow.camera.right = 2000
directionalLight_1.shadow.camera.top = -500
directionalLight_1.shadow.camera.bottom = 500

可以用helper来帮助设置看看这个范围。
let helper = new THREE.CameraHelper(directionalLight_1.shadow.camera);
scene.add(helper)
其次是需要对产生影子的对象设置 castShadow = true;
接收影子的地面设置receiveShadow = true;

let ground = scene.getObjectByName(‘mesh_2370’);
ground.receiveShadow = true;
let tower_1 = scene.getObjectByName(‘mesh_1574’);
tower_1.castShadow = true;

比如下面失败的尝试

用这个DirectionalLight默认配置
light.shadow.camera.near = 0.5; // default
light.shadow.camera.far = 500; // default
在这里插入图片描述
这样失败,因为这个距离还没有到塔这里,影子子够不着。应该使far变大
far改成2000。
在这里插入图片描述
但还是不行,

改成
directionalLight_1.shadow.camera.near = 0.5; // default
directionalLight_1.shadow.camera.far = 500; // default
directionalLight_1.shadow.camera.left = -2000
directionalLight_1.shadow.camera.right = 2000
在这里插入图片描述
还是不行。因为太扁了

改成
directionalLight_1.shadow.camera.near = 0.5; // default
directionalLight_1.shadow.camera.far = 500; // default
directionalLight_1.shadow.camera.left = -2000
directionalLight_1.shadow.camera.right = 2000
directionalLight_1.shadow.camera.top = -500
directionalLight_1.shadow.camera.bottom = 500
在这里插入图片描述

成功!
就是把这个盖子变得足够大即可。根据模型的尺寸来。

也可以自己去https://threejs.org/editor/先尝试下,不过一般模型的尺寸比较大,可以在这个编辑器里面缩小自己的模型进行测试。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值