3D 作品集

Starter pack

到目前为止我们已经学到了很多知识,现在是时候将它们结合在一起了。在本课中,我们将创建一个外观精美且响应迅速的作品集!

别担心,在此过程中我们还将学习新东西 😊

我们将构建什么

桌面版:

手机版:

不要局限于构建完全相同的东西。随意添加您自己的创意。

希望你充满期待!让我们开始吧!🚀

启动包

为了专注于要点,这个最终项目的启动包包含了我们将使用的所有 3D 模型、动画、字体和纹理。(除了头像,我们稍后会讲到)

每个模型的 React 组件都是用 gltfjsx 生成的。

我只在注释中添加了一行来注明作者并跟踪每个模型的来源:

/*
Auto-generated by: https://github.com/pmndrs/gltfjsx
Command: npx gltfjsx@6.2.3 public/models/Balloon.glb -o src/components/Balloon.jsx -r public
Balloon by Poly by Google [CC-BY] (https://creativecommons.org/licenses/by/3.0/) via Poly Pizza (https://poly.pizza/m/d1gDDhM7pTf)
*/

目前,如果我们运行应用程序,启动包看起来是这样的:

Starter pack

一个白色的立方体和一个非常浅的灰色背景。

让我们不再浪费时间,开始构建我们的作品集吧!

3D Avatar

Ready Player Me

我们将使用 Ready Player Me 来创建我们的头像。这是一个免费的服务,允许开发者将头像添加到他们的应用程序中。

访问 Ready Player Me,创建一个账户或者登录(如果你已有账户),然后创建你的头像。

你可以使用照片作为参考,或者从头开始创建一个新的头像。

Ready Player Me avatar creation

编辑器提供了多种选项,可以让你的头像看起来和你很像。

当你对你的头像感到满意时,点击右上角的 Enter Hub 按钮。

在 Hub 中,点击 Customize look 按钮左侧的 下载图标。

Ready Player Me avatar download

然后点击 Download Avatar as .glb file。

你会得到一个以你的头像ID开头,以.glb结尾的文件。

例如,我的文件是 646d9dcdc8a5f5bddbfac913.glb

将此文件复制到项目的 public/models 文件夹中。

然后在终端中运行以下命令:

npx gltfjsx public/models/646d9dcdc8a5f5bddbfac913.glb -o src/components/Avatar.jsx -k -r public

将 646d9dcdc8a5f5bddbfac913.glb 替换为你的头像文件名。

我们使用的参数快速回顾:

  • -o 指定输出文件
  • -k 保留节点的名称
  • -r 指定模型的根路径

在 src/components/Avatar.jsx 文件中,将组件重命名为 Avatar:

// ...

export function Avatar(props) {
  // ...
}

现在我们可以用我们的 Avatar 组件替换掉 src/Experience.jsx 中的 Cube 组件:

import { Environment } from "@react-three/drei";
import { Avatar } from "./Avatar";

export const Experience = () => {
  return (
    <>
      <Environment preset="sunset" />
      <Avatar />
    </>
  );
};

Avatar

现在你应该可以看到你的头像在场景的中央!

一些学生报告说从 gltfjsx 本地 CLI 生成的文件有问题。如果你在显示 Avatar 时遇到任何问题,可以使用 在线版本 来生成 Avatar.jsx 组件。

请确保重命名组件名称,并且模型的路径是正确的。你需要在 useGLTF hook 中以及文件末尾的 preload 函数前添加 /models/ 和模型名称。

对于我的头像,它将是:

// ...
export function Avatar(props) {
const { nodes, materials } = useGLTF("/models/646d9dcdc8a5f5bddbfac913.glb");
// ...

文件末尾:

// ...
useGLTF.preload("/models/646d9dcdc8a5f5bddbfac913.glb");

Mixamo 动画

我们将使用 Mixamo 为我们的化身添加动画。得益于 Ready Player Me,我们已经有了一个绑定好的化身,所以这个过程会非常简单。

进入 Mixamo,创建一个账户或登录(如果你已经有账户),然后进入animations。

你应该在左侧看到animations,右侧是预览区。

Mixamo animations

点击Upload Character按钮,会打开一个模态窗,但它只接受 .fbx、.obj 和 .zip 文件。我们需要将 .glb 文件转换为 .fbx。

我已经在起始包的 public/models 文件夹中提供了一个名为 avatar.fbx 的化身。如果你想使用它,可以跳过下一步。

Three.js logoReact logo

React Three Fiber: The Ultimate Guide to 3D Web Development

✨ You have reached the end of the preview ✨

Go to the next level with Three.js and React Three Fiber!

Get full access to this lesson and the complete course when you enroll:

  • 🔓 Full lesson videos with no limits
  • 💻 Access to the final source code
  • 🎓 Course progress tracking & completion
  • 💬 Invite to our private Discord community
Unlock the Full Course – Just $85

One-time payment. Lifetime updates included.