Three.js 从入门到放弃?No!带你 5 分钟搞懂基础概念

Three.js 从入门到放弃?No!带你 5 分钟搞懂基础概念

在这里插入图片描述

Three.js 是一个基于 WebGL 的强大 JavaScript 库,专门用来创建和展示 3D 内容。如果你曾被 “3D 开发太难了” 的想法吓到,今天这篇文章就是为你准备的。我们用最简单的语言,5 分钟搞懂 Three.js 的核心概念,并用一段最基础的代码点亮你的 3D 世界。


一、Three.js 的核心概念

想象一下,你要在现实生活中搭建一个舞台。需要什么?

  1. 舞台(场景 Scene)
    舞台是所有表演的地方。在 Three.js 中,场景就是用来容纳所有 3D 对象的空间。

  2. 观众的视角(相机 Camera)
    相机就像观众的眼睛,负责从特定的角度去观察舞台上的内容。

  3. 灯光(Lights)
    没有灯光,再华丽的场景也会一片漆黑。

  4. 演员(几何体 Geometry 和材质 Material)
    演员就是场景中的物体,例如立方体、球体,甚至是复杂的 3D 模型。

  5. 导演(渲染器 Renderer)
    渲染器负责把所有这些元素“拍成”一张图,然后呈现在你的浏览器中。


二、Three.js 的最小代码示例

下面我们用一段简单的代码实现一个基本的 3D 场景,包括一个旋转的立方体。

代码准备

  1. 在你的项目中引入 Three.js:

    • 使用 CDN 引入:
      <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/110/three.min.js"></script>
      
    • 或者使用 npm 安装:
      npm install three
      
  2. 创建一个 HTML 文件:

    <!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; }
            canvas { display: block; }
        </style>
    </head>
    <body>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/110/three.min.js"></script>
        <script>
            // 在这里编写 Three.js 代码
        </script>
    </body>
    </html>
    

基础代码实现

下面是完整的 JavaScript 示例代码:

// 1. 创建场景
const scene = new THREE.Scene();

// 2. 创建相机(透视相机)
const camera = new THREE.PerspectiveCamera(
    75, // 视角
    window.innerWidth / window.innerHeight, // 宽高比
    0.1, // 近剪裁面
    1000 // 远剪裁面
);
camera.position.z = 5; // 相机位置

// 3. 创建渲染器
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight); // 设置渲染尺寸
document.body.appendChild(renderer.domElement); // 将渲染器添加到 HTML

// 4. 创建几何体(立方体)
const geometry = new THREE.BoxGeometry(); // 几何体
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); // 材质
const cube = new THREE.Mesh(geometry, material); // 网格 = 几何体 + 材质
scene.add(cube); // 添加到场景

// 5. 渲染循环
function animate() {
    requestAnimationFrame(animate); // 循环调用
    cube.rotation.x += 0.01; // 旋转立方体
    cube.rotation.y += 0.01;
    renderer.render(scene, camera); // 渲染场景
}
animate();

代码解释

1. 创建场景
const scene = new THREE.Scene();

场景是所有 3D 对象的容器,用来存放物体、灯光等元素。

2. 创建相机
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.z = 5;

透视相机模拟了人眼的视角,它的 4 个参数分别是:

  • 视角(fov):视野的广度(以角度表示)。
  • 宽高比(aspect):通常是浏览器窗口的宽高比。
  • 近剪裁面(near)远剪裁面(far):定义相机能看到的范围。
3. 创建渲染器
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

渲染器将场景和相机的数据渲染为 2D 图像,并添加到 HTML 页面。

4. 创建立方体
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);
  • BoxGeometry 创建一个立方体。
  • MeshBasicMaterial 定义了物体的外观(颜色、纹理等)。
  • Mesh 是一个三维物体,由几何体和材质组成。
5. 渲染循环
function animate() {
    requestAnimationFrame(animate);
    cube.rotation.x += 0.01;
    cube.rotation.y += 0.01;
    renderer.render(scene, camera);
}
animate();

requestAnimationFrame 用于循环执行动画,每帧更新立方体的旋转角度。


三、运行效果

运行代码后,你会看到一个旋转的绿色立方体,它会持续在屏幕上旋转,直到你关闭页面。


四、常见问题与解决方案

  1. 页面空白或错误

    • 检查是否正确引入 Three.js 文件。
    • 确保渲染器被正确挂载到 HTML。
  2. 模型显示为黑色

    • 检查材质类型。如果需要灯光支持的效果,请使用 MeshStandardMaterial 或添加灯光。
  3. 响应式适配

    • 为了适应窗口大小变化,可以监听 resize 事件:
      window.addEventListener('resize', () => {
          camera.aspect = window.innerWidth / window.innerHeight;
          camera.updateProjectionMatrix();
          renderer.setSize(window.innerWidth, window.innerHeight);
      });
      

五、总结

通过本文,你应该对 Three.js 的核心概念和基本操作有了初步了解。我们从搭建场景、创建相机,到渲染一个简单的 3D 立方体,体验了 Three.js 的便捷性。接下来,你可以尝试添加灯光、纹理,甚至加载 3D 模型,让你的项目更炫酷!

更多精彩内容,敬请期待下一篇文章:《Three.js:光影魔术手,灯光与材质的魅力》。 🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈探索者chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值