VUE2+THREE.JS模型阴影设定

如何让物体产生阴影效果呢?

1.场景中所有的物体都必须是感光材质(MeshLambertMaterial),然后是光源的设定,支持阴影的光源有pointLight,spotlight,directionallight,环境光AmbientLight是无法产生阴影的。

2.设定模型阴影,要考虑哪些物体要产生阴影,哪些物体要接收阴影

例如:你有一个模型,需要地板接收阴影,地板上的设备要产生阴影

1.渲染器中启动阴影

renderer.shadowMap.enabled = true;
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
renderer.hadowMapEnabled = true;

2.用太阳光设定阴影属性

//增加太阳光
const directionalLight = new THREE.DirectionalLight(0xffffff, 0.5);
directionalLight.name = "directionalLight";
directionalLight.position.set(8000, 8000, -2000);
scene.add(directionalLight);
// shadowmap的区域,值越大阴影质量越好
directionalLight.castShadow = true;
directionalLight.shadow.mapSize.width = 2048;
directionalLight.shadow.mapSize.height = 2048;
const cam = directionalLight.shadow.camera;
// 方向光投影近点、远点更新
cam.near = 1000;
cam.far = 40000;
// 方向光投影边界更新
cam.top = 8000;
cam.bottom = -8000;
cam.left = -8000;
cam.right = 8000;

可以使用光投影相机辅助线,来查看相机照射范围CameraHelper

//光投影相机
 const cameraHelper = new THREE.CameraHelper(cam);
 scene.add(cameraHelper);
 cameraHelper.visible = true;

3.地板接收阴影,其余的产生阴影

 var loader = new FBXLoader()
    loader.load(`three/${path}.fbx`, (fbx) => {
      const receiveModel = ['地板'];
      fbx.traverse((obj) => {
        //阴影
        if (receiveModel.includes(obj.name)) {
          obj.receiveShadow = true;//接收阴影
        } else {
          obj.castShadow = true;//产生阴影
          obj.receiveShadow = false;//接收阴影
        }
      });
    },
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值