从入门到实践:Three.js 的奇幻 3D 世界探索

从入门到实践:Three.js 的奇幻 3D 世界探索

在 Web 开发领域,3D 图形的呈现越来越受到关注。Three.js 作为一个基于 JavaScript 的轻量级 3D 库,无需借助复杂的插件(如 Flash),就能在网页上创建出令人惊叹的 3D 场景。无论是制作 3D 游戏、产品展示,还是数据可视化,Three.js 都能大显身手。本文将带领你从基础概念出发,结合实际案例,一步步走进 Three.js 的 3D 世界。

一、Three.js 基础概念

在开始编写代码之前,我们需要先了解 Three.js 的几个核心概念,它们是构建 3D 场景的基石。

  1. 场景(Scene):场景是所有 3D 对象的容器,它就像是一个虚拟的舞台,你可以在这个舞台上放置各种物体、灯光等元素。

  2. 相机(Camera):相机决定了我们从哪个角度去观察场景,不同类型的相机(如透视相机、正交相机)会带来不同的视觉效果。

  3. 渲染器(Renderer):渲染器负责将场景和相机的内容渲染到网页上,它会将 3D 场景转换为 2D 图像显示在浏览器中。

  4. 几何体(Geometry):几何体定义了物体的形状,例如立方体、球体、平面等。

  5. 材质(Material):材质决定了物体的外观,包括颜色、纹理、透明度等属性。

二、搭建第一个 Three.js 场景

接下来,我们通过一个简单的案例来搭建一个包含立方体的 3D 场景。

1. 准备工作

首先,在 HTML 文件中引入 Three.js 库。你可以通过 CDN 的方式引入:

<!DOCTYPE html>


<html lang="en">


<head>


<meta charset="UTF-8">


<meta name="viewport" content="width=device-width, initial-scale=1.0">


<title>Three.js入门案例</title>


<style>


  body {


    margin: 0;


    overflow: hidden;


  }


</style>


</head>


<body>


<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r151/three.min.js"></script>


<script src="script.js"></script>


</body>


</html>

这里在<body>标签中引入了 Three.js 的 CDN 链接,并预留了一个script.js文件用于编写 JavaScript 代码。

2. JavaScript 代码实现

script.js文件中,编写以下代码:

// 创建场景


const scene = new THREE.Scene();


// 创建相机


const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);


camera.position.z = 5;


// 创建渲染器


const renderer = new THREE.WebGLRenderer();


renderer.setSize(window.innerWidth, window.innerHeight);


document.body.appendChild(renderer.domElement);


// 创建几何体


const geometry = new THREE.BoxGeometry();


// 创建材质


const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });


// 创建网格对象(将几何体和材质组合)


const cube = new THREE.Mesh(geometry, material);


scene.add(cube);


// 渲染函数


function animate() {


requestAnimationFrame(animate);


cube.rotation.x += 0.01;


cube.rotation.y += 0.01;


renderer.render(scene, camera);


}


animate();

代码解释:

  • 首先创建了场景scene、透视相机camera和 WebGL 渲染器renderer,并将渲染器的 DOM 元素添加到网页的body中。

  • 然后创建了一个立方体的几何体BoxGeometry和绿色的基础材质MeshBasicMaterial,将它们组合成一个网格对象cube并添加到场景中。

  • 最后定义了一个animate函数,使用requestAnimationFrame实现动画效果,让立方体在每一帧都绕 X 轴和 Y 轴旋转一定角度,并调用renderer.render方法渲染场景和相机。

运行 HTML 文件,你将看到一个绿色的立方体在浏览器中缓缓旋转。

三、进阶案例:创建带纹理的球体

接下来,我们进一步深入,创建一个带有纹理的球体,让场景更加生动。

1. 准备纹理图片

在项目目录下创建一个textures文件夹,放入一张纹理图片(例如一张地球的纹理图earth.jpg)。

2. 修改 JavaScript 代码

// 创建场景


const scene = new THREE.Scene();


// 创建相机


const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);


camera.position.z = 5;


// 创建渲染器


const renderer = new THREE.WebGLRenderer();


renderer.setSize(window.innerWidth, window.innerHeight);


document.body.appendChild(renderer.domElement);


// 创建纹理加载器


const textureLoader = new THREE.TextureLoader();


// 加载纹理


const texture = textureLoader.load('textures/earth.jpg');


// 创建几何体


const geometry = new THREE.SphereGeometry(1, 32, 32);


// 创建带有纹理的材质


const material = new THREE.MeshBasicMaterial({ map: texture });


// 创建网格对象


const sphere = new THREE.Mesh(geometry, material);


scene.add(sphere);


// 渲染函数


function animate() {


requestAnimationFrame(animate);


sphere.rotation.x += 0.01;


sphere.rotation.y += 0.01;


renderer.render(scene, camera);


}


animate();

在这段代码中,我们新增了纹理加载的步骤:

  • 使用THREE.TextureLoader创建纹理加载器textureLoader

  • 通过textureLoader.load方法加载指定路径下的纹理图片,并将其赋值给texture变量。

  • 在创建材质时,将map属性设置为加载的纹理texture,这样球体就会显示出纹理效果。

运行代码,你将看到一个带有纹理的球体在浏览器中旋转,仿佛一个真实的星球。

posted @ 2025-07-02 11:15  夜星VB  阅读(71)  评论(0)    收藏  举报