Three.js 添加阴影

关键技术

  1. shadowMapEnabled
  2. castShadow
  3. receiveShadow

引言

在three中渲染阴影需要耗费大量计算,所以默认情况下,渲染阴影的属性都是关闭,并不生成阴影。
如果需要为物体添加阴影的话,大体分为四步:

step1 :

告诉renderer我要渲染阴影

var renderer = new THREE.WebGLRenderer({antialias:true});
renderer.setClearColor(new THREE.Color(0xffffff));
renderer.shadowMapEnabled = true; // 启用阴影选项
step2:

让物体投射阴影

var geo = new THREE.BoxGeometry(10,10,10);
var mat = new THREE.MeshPhoneMaterial({color:0xffffff});
var cube = new THREE.Mesh(geo,mat);
cube.castShadow = true; // 启用阴影选项
step3:

让另外一个物体(平面或其他物体接受阴影)

var geo = new THREE.PlaneGeometry(100,50,32,32);
var mat = new THREE.MeshPhoneMaterial({color:0xeeeeee,side:THREE.DoubleSize});
var plane = new THREE.Mesh(geo,mat);
plane.receiveShadow = true; // 启用接受阴影选项
step4:

告诉光源需要投射阴影

var light = new THREE.DirectionalLight(color:0xffffff);
light.castShadow = true; // 启用阴影选项
scene.add(light);

注意:
用MeshPhoneMaterial是为了创建光亮的物体,MeshLambertMaterial创建会不光亮颜色暗淡模糊
完成以上四个步骤,即可完整的呈现阴影效果

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在three.js中绘制具有阴影的正方体,你需要使用阴影映射(Shadow Mapping)技术。下面是一段示例代码: ```javascript // 创建场景 var scene = new THREE.Scene(); // 创建相机 var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); camera.position.z = 5; // 创建光源 var light = new THREE.DirectionalLight(0xffffff, 1); light.position.set(0, 1, 1); light.castShadow = true; scene.add(light); // 创建几何体 var geometry = new THREE.BoxGeometry(1, 1, 1); // 创建材质 var material = new THREE.MeshStandardMaterial({color: 0xffffff}); // 创建网格 var cube = new THREE.Mesh(geometry, material); cube.castShadow = true; cube.receiveShadow = true; // 将网格添加到场景中 scene.add(cube); // 创建地面 var groundGeometry = new THREE.PlaneGeometry(10, 10); var groundMaterial = new THREE.MeshStandardMaterial({color: 0xaaaaaa}); var ground = new THREE.Mesh(groundGeometry, groundMaterial); ground.rotation.x = -Math.PI / 2; ground.position.y = -1; ground.receiveShadow = true; scene.add(ground); // 创建渲染器 var renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); renderer.shadowMap.enabled = true; renderer.shadowMap.type = THREE.PCFSoftShadowMap; document.body.appendChild(renderer.domElement); // 渲染场景 function animate() { requestAnimationFrame(animate); cube.rotation.x += 0.01; cube.rotation.y += 0.01; renderer.render(scene, camera); } animate(); ``` 这段代码将会创建一个具有阴影的白色正方体,并在屏幕上旋转它。需要注意的是,要让物体产生阴影,你需要将`castShadow`属性设置为`true`,同时要让物体接收阴影,你需要将`receiveShadow`属性设置为`true`。而要让地面接收阴影,你只需要将其`receiveShadow`属性设置为`true`。此外,还需要通过设置`renderer.shadowMap.enabled`属性为`true`来启用阴影映射。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值