五分钟学会3D月球环绕动画
2023-11-11 11:18:00
3D 月球动画:绕地球运转的魅力
引言
中秋佳节将至,皓月当空,皎洁迷人。本教程将带你踏上迷人的旅程,让你亲手制作一个 3D 月球绕地球运转的动画。利用 Three.js 的强大功能,我们将打造一个逼真的场景,展示月球绕地球的优雅舞姿。
准备工作
首先,我们需要一个 div 元素作为容器,并设置其宽高和背景颜色:
<div id="moon"></div>
#moon {
width: 500px;
height: 500px;
background-color: black;
}
接下来,添加一个 canvas 元素并设置其宽高:
<canvas id="canvas"></canvas>
#canvas {
width: 500px;
height: 500px;
}
场景设置
现在,我们进入 Three.js 的世界。创建一个场景,并添加一个相机和渲染器:
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
构建地球和月球
接下来,让我们创造地球和月球的 3D 模型。首先,创建一个球体作为地球:
const geometry = new THREE.SphereGeometry(100, 32, 32);
const material = new THREE.MeshPhongMaterial({ color: 0x0077ff });
const earth = new THREE.Mesh(geometry, material);
scene.add(earth);
然后,创建一个球体作为月球:
const moonGeometry = new THREE.SphereGeometry(50, 32, 32);
const moonMaterial = new THREE.MeshPhongMaterial({ color: 0xffffff });
const moon = new THREE.Mesh(moonGeometry, moonMaterial);
scene.add(moon);
添加光源
为了照亮我们的场景,我们需要一个光源:
const light = new THREE.PointLight(0xffffff, 1, 1000);
scene.add(light);
相机视角
接下来,让我们设置相机的初始位置和方向:
camera.position.z = 500;
动画效果
现在,让我们赋予动画生命。使用 requestAnimationFrame() 函数持续渲染场景,并随着时间推移旋转地球和月球:
function animate() {
requestAnimationFrame(animate);
earth.rotation.y += 0.01;
moon.rotation.y += 0.02;
renderer.render(scene, camera);
}
animate();
整合到页面
最后一步是将画布添加到页面中:
document.body.appendChild(renderer.domElement);
代码示例
以下是完整的代码示例:
<div id="moon"></div>
<canvas id="canvas"></canvas>
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
const geometry = new THREE.SphereGeometry(100, 32, 32);
const material = new THREE.MeshPhongMaterial({ color: 0x0077ff });
const earth = new THREE.Mesh(geometry, material);
scene.add(earth);
const moonGeometry = new THREE.SphereGeometry(50, 32, 32);
const moonMaterial = new THREE.MeshPhongMaterial({ color: 0xffffff });
const moon = new THREE.Mesh(moonGeometry, moonMaterial);
scene.add(moon);
const light = new THREE.PointLight(0xffffff, 1, 1000);
scene.add(light);
camera.position.z = 500;
function animate() {
requestAnimationFrame(animate);
earth.rotation.y += 0.01;
moon.rotation.y += 0.02;
renderer.render(scene, camera);
}
animate();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
常见问题解答
1. 为什么我无法看到动画?
答:确保 Three.js 库已正确加载到页面中。此外,检查是否已将渲染器的 domElement 添加到 body 元素。
2. 我可以更改地球和月球的颜色吗?
答:是的,你可以通过修改 MeshPhongMaterial 的 color 属性来更改颜色。
3. 如何控制地球和月球的旋转速度?
答:旋转速度可以通过在 animate() 函数中调整 earth.rotation.y 和 moon.rotation.y 的增量值来控制。
4. 我可以添加其他元素到场景中吗?
答:当然,你可以添加诸如星星、行星和宇航员之类的其他元素。Three.js 为你提供了无限的可能性。
5. 我应该在哪里学习更多关于 Three.js?
答:Three.js 官网提供了丰富的文档、教程和示例,供你深入探索。
结语
制作一个 3D 月球绕地球运转的动画是一个激动人心的过程,可以帮助你深入了解 Three.js 的强大功能。通过遵循本教程,你已经掌握了创造令人惊叹的 3D 场景所需的技能。现在,是时候发挥你的创造力,让你的想象力自由驰骋。中秋节快乐!