threejs中的阴影

1.效果

2.实现要求

渲染器开启阴影渲染
this.renderer.shadowMap.enabled = true;
灯光需要开启“引起阴影”
dirLight.castShadow = true
物体需要开启“引起阴影”
svg.castShadow = true
平面开启“接受阴影”
plane.receiveShadow = true

shadowMap.autoUpdate : Boolean
启用场景中的阴影自动更新。默认是true,如果不需要动态光照/阴影, 则可以在实例化渲染器时将之设为false
shadowMap.needsUpdate : Boolean
当被设为true, 场景中的阴影贴图会在下次render调用时刷新。默认是false,如果你已经禁用了阴影贴图的自动更新(shadowMap.autoUpdate = false), 那么想要在下一次渲染时更新阴影的话就需要将此值设为true
shadowMap.type : Integer
定义阴影贴图类型 (未过滤, 关闭部分过滤, 关闭部分双线性过滤)
可选值有
THREE.BasicShadowMap:能够给出没有经过过滤的阴影映射 —— 速度最快,但质量最差
THREE.PCFShadowMap (默认) :使用Percentage-Closer Filtering (PCF)算法来过滤阴影映射
THREE.PCFSoftShadowMap:使用Percentage-Closer Soft Shadows (PCSS) 算法来过滤阴影映射

3.遇到的问题以及解决方法

上面都设置好了,但是就是没有阴影。

(一)plane的材质不对

一开始设置的材质是new this.THREE.MeshBasicMaterial({}),发现并没有什么效果。
后来修改之后new this.THREE.MeshLambertMaterial({})就可以啦。

(二)平行光设置
	 let dirLight = new this.THREE.DirectionalLight(0x666666)
	 dirLight.position.set(500,500,500)
     dirLight.shadow.camera.near = 2;
     dirLight.shadow.camera.far = 2000;
     dirLight.shadow.camera.left = -1000;
     dirLight.shadow.camera.right = 1000;
     dirLight.shadow.camera.top = 1000;
     dirLight.shadow.camera.bottom = -1000;

这里规定了平行光产生阴影的投影范围。
这里存在物体不在平行光投影范围内的情况,这里推荐使用灯光和阴影的helper

	  // 灯光,可以画出一个灯光的位置
	  var helper02 = new this.THREE.PointLightHelper(dirLight, 6);
      this.scene.add(helper02);
      // 阴影,可以给出阴影的范围
      var helper = new this.THREE.CameraHelper( dirLight.shadow.camera );
      this.scene.add( helper );

加上helper之后显示效果如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值