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.