You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Three.js中方向光阴影无法生成问题求助

Three.js阴影不显示的问题修复

你的代码里有两个核心问题导致球体无法在平面上投射阴影:

1. 平面使用了不支持光照/阴影的材质

你给平面配置的MeshBasicMaterial是不受光照影响的基础材质,无法接收阴影效果。需要替换为支持光照计算的材质,比如MeshStandardMaterial(和球体使用的材质类型一致):

// 原代码
const planMaterial = new THREE.MeshBasicMaterial({
  color: 0xffff00,
  side: THREE.DoubleSide,
});

// 修改后
const planMaterial = new THREE.MeshStandardMaterial({
  color: 0xffff00,
  side: THREE.DoubleSide,
});

2. 方向光的阴影相机范围未覆盖场景物体

DirectionalLight的阴影相机默认范围极小,没有包含你的球体和平面。需要手动调整阴影相机的参数,确保它能覆盖整个场景区域:

const directionLight = new THREE.DirectionalLight(0xffffff);
scene.add(directionLight);
directionLight.position.set(-30, 50, 0);
directionLight.castShadow = true;

// 添加以下代码扩展阴影相机范围
directionLight.shadow.camera.left = -40;
directionLight.shadow.camera.right = 40;
directionLight.shadow.camera.top = 40;
directionLight.shadow.camera.bottom = -40;
directionLight.shadow.camera.near = 1;
directionLight.shadow.camera.far = 100;

// 可选:添加阴影相机助手,方便可视化调试范围
const shadowHelper = new THREE.CameraHelper(directionLight.shadow.camera);
scene.add(shadowHelper);

另外还有个非功能性小问题:变量名spherMaterial存在拼写错误(应为sphereMaterial),不影响运行但建议修正以保持代码规范。

修复以上两点后,球体就能正常在平面上投射阴影了。

内容的提问来源于stack exchange,提问作者Muhammad Tehsin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 10:21:12