threejs 创建有阴影立方体
时间: 2023-08-04 17:03:27 浏览: 111
要创建一个带有阴影的立方体,可以使用Three.js中的DirectionalLight类和SpotLight类来创建光源,使用MeshStandardMaterial类来创建材质,并将场景中的物体设置为接收阴影和投射阴影。
下面是一个示例代码:
```javascript
// 导入Three.js库
import * as THREE from 'three';
// 创建场景
const scene = new THREE.Scene();
// 创建相机
const camera = new THREE.PerspectiveCamera(
75, // 视角
window.innerWidth / window.innerHeight, // 宽高比
0.1, // 近裁剪面
1000 // 远裁剪面
);
// 创建渲染器
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.shadowMap.enabled = true; // 启用阴影
document.body.appendChild(renderer.domElement);
// 创建立方体
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshStandardMaterial({
color: 0x00ff00,
roughness: 0.5,
metalness: 0.5
});
const cube = new THREE.Mesh(geometry, material);
cube.castShadow = true; // 投射阴影
cube.receiveShadow = true; // 接收阴影
scene.add(cube);
// 创建光源
const directionalLight = new THREE.DirectionalLight(0xffffff, 1);
directionalLight.position.set(0, 10, 0);
directionalLight.castShadow = true; // 投射阴影
scene.add(directionalLight);
const spotLight = new THREE.SpotLight(0xffffff, 1);
spotLight.position.set(0, 10, 0);
spotLight.castShadow = true; // 投射阴影
scene.add(spotLight);
// 设置相机位置
camera.position.z = 5;
// 渲染场景
function animate() {
requestAnimationFrame(animate);
cube.rotation.x += 0.01;
cube.rotation.y += 0.01;
renderer.render(scene, camera);
}
animate();
```
在上面的代码中,我们使用MeshStandardMaterial类创建立方体的材质,并将其属性设置为启用阴影。然后,我们将立方体设置为投射阴影和接收阴影。我们还使用DirectionalLight类和SpotLight类创建光源,并将其设置为投射阴影。最后,我们使用requestAnimationFrame()函数循环渲染场景,产生动画效果。
阅读全文