返回

五分钟学会3D月球环绕动画

前端

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 场景所需的技能。现在,是时候发挥你的创造力,让你的想象力自由驰骋。中秋节快乐!