发布于 2026-01-06 2 阅读
0

使用 React-Three-Fiber 在 React 中导入和交互 3D 模型 DEV 的全球展示挑战赛,由 Mux 呈现:展示你的项目!

使用 React-Three-Fiber 在 React 中导入和交互 3D 模型

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

React-Three-Fiber是一个强大的库,它结合了React的优势和Three.js的功能。在本文中,我们将分析一段代码,演示如何使用React-Three-Fiber和其他辅助库(例如@react-three/drei )来实现一个交互式 3D 地球模型。
我们假设您已经对 React 有基本的了解,并且已经搭建了一个新的 React 应用程序。

步骤一:安装所需软件包

首先,我们来安装依赖项。请在终端中运行以下命令(确保您位于项目的根目录):

npm install three @react-three/fiber @react-three/drei

这里,three是react-three-fiber用于创建和渲染 3D 场景的基础库。 @react-three/drei是react-three-fiber的一个辅助库,提供了一组可重用的组件和函数。

步骤二:下载3D模型

请确保您已下载 3D 模型并将其放置在public项目根目录下的文件夹中,如下所示:

公共文件夹中的 3D 资产

您可以从这里下载本教程
将使用其中一种格式。.gltf

步骤 3:设置画布

现在,在你的 React 组件中Canvas@react-three/fiber导入它。

import { Canvas } from '@react-three/fiber';

在 return 语句中使用 Canvas,如下所示:



import { Canvas } from '@react-three/fiber';

const EarthCanvas = () => {
  return (
    <Canvas frameloop="demand" camera={{ position: [-4, 3, 6], fov: 45, near: 0.1, far: 200 }}> 
    </Canvas>
  );
};

export default EarthCanvas;


Enter fullscreen mode Exit fullscreen mode

Canvas需要一些道具:

  • frameloopprop set todemand告诉 react-three-fiber 只在状态改变时重新渲染。
  • camera道具用于调整摄像机在场景中的位置、视野范围以及近裁剪面和远裁剪面。您可以根据自己的喜好进行调整。

步骤 4:在 React 组件中导入 3D 模型

public为了导入我们放置在项目文件夹中的 3D 模型,我们将使用@react-three/dreiuseGLTF中的 hook

在组件顶部这样使用它:

const earth = useGLTF('./planet/scene.gltf');

useGLTF 钩子函数接受一个参数,即 3D 模型文件的路径scene

步骤 5:渲染 3D 模型

我们可以使用该组件来渲染组件primitive。它是一个底层的 react-three-fiber 组件,可以表示任何 three.js 对象。

<primitive object={earth.scene} scale={2.5} />

scale道具用于调整模型的大小。

现在,我们可以使用此组件App.jsx在浏览器中查看它。返回语句App.jsx如下所示:



  return (
    <div className="flex justify-center items-center h-screen w-screen">
      <EarthCanvas />
    </div>
)


Enter fullscreen mode Exit fullscreen mode

瞧,这就是在 React 应用中渲染 3D 模型所需的一切。

应用程序中的地球模型

如果您看不到模型或模型太暗,请尝试ambientLight在场景中添加一个。

<ambientLight intensity={0.5} />

还有其他一些增加照明的方法,例如directionalLight…… spotLight。您可以在这里了解更多信息

步骤 6:添加交互性

为了给我们的模型添加交互性,我们可以使用@react-three/dreiOrbitControls中的组件,如下所示:

<OrbitControls autoRotate enableZoom={false} maxPolarAngle={Math.PI / 2} minPolarAngle={Math.PI / 2} enablePan={false} />

  • autoRotate道具可使模型自动旋转。

  • enableZoom在这种情况下, propsenablePan设置为 false,以禁用缩放和平移。

  • maxPolarAngle道具minPolarAngle用于限制摄像机围绕 3D 物体的垂直旋转范围。

现在您也可以使用光标旋转模型了。

因此,我们 EarthCanvas 组件的最终代码如下所示:



import { Canvas } from '@react-three/fiber';
import { OrbitControls, useGLTF } from '@react-three/drei';

const EarthCanvas = () => {
const earth = useGLTF('./planet/scene.gltf');

return (
<Canvas className="cursor-pointer" frameloop="demand" camera={{ position: [-4, 3, 6], fov: 45, near: 0.1, far: 200 }}>
<OrbitControls autoRotate enableZoom={false} maxPolarAngle={Math.PI / 2} minPolarAngle={Math.PI / 2} enablePan={false} />
<primitive object={earth.scene} scale={2.5} />
</Canvas>
);
};

export default EarthCanvas;

Enter fullscreen mode Exit fullscreen mode




最后想说的话

本教程到此结束。我们使用 React 应用中的 `render`、`frame`和`render` 渲染了一个 3D 模型threejs并添加了一些交互功能,使其更有趣。react-three-fiberreact-three/drei

您可以在这里找到官方文档,并使用React-Three-Fiber探索 React 中 3D 渲染的广阔世界

文章来源:https://dev.to/abdnadeem382/importing-and-interacting-with-a-3d-model-in-react-with-react- Three-Fiber-2fni