(使用🖼️表情包图片学习)如何使用🧠AI创建🎨3D动画(React Three Fiber vs Three.js vs A-Frame + GSAP)

发布: (2025年12月11日 GMT+8 19:42)
5 min read
原文: Dev.to

Source: Dev.to

引言

最近,我一直在开发我的脑力训练应用 Muscle Brain

上一次,我为该应用搭建了一个网站,并使用 GSAP 制作了 2D 动画。

现在我想学习 3D 并把动画从 2D 转换为 3D。学习 3D 的过程比我预想的要更具挑战性,因为涉及了许多新概念。让我们一起通过表情包图片边玩边学,逐步掌握 3D 吧! 🚀

3D 网页 与 2D 网页 的区别

3D 能提供更沉浸、更真实的动画体验,但学习曲线比 2D 陡峭。主要区别如下:

概念2D 网页3D 网页
难度简单困难
坐标轴X, YX, Y, Z
相机
光照
着色方式CSSMaterial
  • 坐标轴:2D 只使用 X(水平)和 Y(垂直)。3D 额外加入 Z(深度),可以让物体远近不同。
  • 相机:2D 不需要相机,所有内容都是可见的。3D 需要相机并设置位置、旋转和视野(FOV),相机后面的物体不可见。
  • 光照:在 3D 中必须有光源,否则材质会呈现全黑。
  • 材质:3D 使用材质并拥有 metalness(0 = 塑料,1 = 金属)和 roughness(0 = 镜面,1 = 哑光)等属性。CSS 仍然用于 canvas 周围的 UI 布局。

比较图像

重要的 3D 术语

下面列出了在使用 Three.js(或其封装库)时会经常碰到的关键词汇。

词汇含义
Scene承载所有对象的画布
Camera你的眼睛;决定场景的哪一部分可见
Render从相机视角绘制场景
Geometry对象的形状
Material外观(颜色、纹理等)
Mesh由几何体 + 材质组合而成的 3D 对象

3D 术语图像

Three.js vs React Three Fiber vs A‑Frame

这三种库都对 WebGL 进行封装,使 3D 开发更简单,但它们面向的工作流不同。

Three.js

  • 直接封装 WebGL。
  • 处理场景、灯光、材质等,减少低层代码量。
  • 官方文档:

React Three Fiber (r3f)

  • 为 Three.js 提供的 React 渲染器。
  • 让你以 React 组件的形式编写 3D 代码,支持复用和声明式写法。
  • 文档:

A‑Frame

  • 基于 Three.js 的声明式 HTML 框架,侧重 VR/AR。
  • 适合不使用 React 的开发者快速做出 3D/VR 原型。
  • 文档:

对比表

特性Three.jsReact Three FiberA‑Frame
难度困难中等简单
代码风格面向对象React 组件HTML 组件
框架要求原生 JS / 任意仅 React原生 JS / 任意
最佳适用需要最大控制、非 React 项目React 开发者初学者、VR/AR 项目

这三者都可以在 Node.js 环境下使用。React Three Fiber 需要 React,而 Three.js 与 A‑Frame 可配合普通 JavaScript/TypeScript 以及任意框架。

示例星系动画(CodePen)

我做了一个非常简易的星系动画,随机的星星从远处向相机靠近。星星会自行发光,所以不需要光源。使用的材质如下:

  • React Three FibermeshBasicMaterial
  • Three.jsMeshBasicMaterial
  • A‑Frameshader: flat

星系动画预览

React Three Fiber 代码示例(GSAP 动画)

下面的代码片段让每颗星星从远处位置 (z: -50) 在 3 秒内移动到靠近相机的位置 (z: 5),并无限循环。

// Animate the star using GSAP
// gsap.fromTo = animate FROM one value TO another value
gsap.fromTo(
  ref.current.position,          // What to animate (the star's position in 3D space)
  { z: -50 },                    // Starting value: far away (50 units behind camera)
  {
    z: 5,                        // Ending value: close to camera (5 units in front)
    duration: 3,                 // Animation takes 3 seconds
    delay: 0,                    // No initial delay
    repeat: -1,                  // Loop forever
    ease: "none"
  }
);
Back to Blog

相关文章

阅读更多 »

Google Cloud 存储数据的选项

Google Cloud 存储数据选项的封面图片 https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2F…

个人身份代理 for your Agent

解决“AI Agent Trust Problem”。我很兴奋地分享 Personal Identity Agent(PIA)平台和 SDK。AI agents 正变得越来越强大,但……