如何在 React 應用程序中渲染 3D 對象

如何在 React 應用程序中渲染 3D 對象

3D 渲染的引入改變了用戶與互聯網技術的交互方式。首先,網絡應用程序變得更加身臨其境,通過網絡瀏覽器提供引人入勝的互動體驗。

這項技術已經被遊戲和增強/虛擬現實領域熱切採用。它提供了一種逼真且身臨其境的方式來與虛擬元素進行交互。

了解如何在 React 應用程序中渲染 3D 對象。

3D 建模和編程基礎知識

具有閃亮柔和色彩的紋理 3D 球體

在開始使用 3D 渲染之前,您需要了解以下幾點:

  • 3D 對象包含單獨的點或頂點,它們在三個維度上定義其結構。連接這些點會創建構成屏幕上對象形狀的面。
  • 現代瀏覽器具有使用 WebGL 等技術呈現 3D 的內置功能。他們通過利用機器中圖形處理單元的強大功能來快速渲染 3D 模型和場景。
  • 您的瀏覽器呈現的任何 3D 對像都包含三個主要組件。這些就是場景、相機和渲染器,它們都起著至關重要的作用。該場景提供了用於設置所有 3D 元素(包括燈光和相機)的基礎平台。攝像頭允許您從不同角度查看 3D 對象。最後,渲染器在 canvas HTML 元素之上裝載並顯示場景。

使用 Three.js 和 React 三纖維進行 3D 渲染

Three.js是一個 JavaScript 庫,可用於在 Web 瀏覽器中渲染 3D 對象。使用其內置組件,您可以輕鬆地在瀏覽器中創建和渲染 3D 對像以及 React 應用程序的其他功能。

react-three-fiber 包在 Three.js 之上運行。它簡化了使用 Three.js 組件在瀏覽器中創建和渲染 3D 對象的過程。有趣的是,它還提供自定義 React 鉤子,在 React 中創建 3D 對象時可以派上用場。

在 React 應用程序中渲染 3D 對象

按照以下步驟在瀏覽器上渲染一個簡單的 3D 形狀以及 Blender 創建的 3D 模型。如果您不熟悉 Blender,請了解如何作為初學者開始使用。

創建一個 React 應用程序,啟動您的終端以運行以下命令,並安裝所需的依賴項:

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

安裝 Three.js、react-three-fiber 和 react-three-drei 包。react-three-drei 庫與 react-three-fiber 一起工作以創建 3D 場景和對象。

渲染 3D 形狀

您可以使用很少的代碼在瀏覽器中呈現一個簡單的 3D 框形狀。打開src/app.js文件,刪除所有樣板 React 代碼,並添加以下內容:

import React from "react";
import {Canvas} from "@react-three/fiber";
import {OrbitControls} from "@react-three/drei";

function Box() {
  return (
    <mesh>
      <boxBufferGeometry attach ="geometry" />
      <meshLambertMaterial attach="material" color="hotpink" />
    </mesh>
  )
}


export default function App() {
  return (
    <div className="App">
      <div className="App-header">
        <Canvas>
          <OrbitControls />
          <ambientLight intensity ={0.5} />
          <spotLight position={[10, 15,10]} angle={0.3} />
          <Box />
        </Canvas>
      </div>
    </div>
  );
}

此代碼執行以下操作:

  • Box組件使用 react-three-fiber 中的 mesh、boxBufferGeometry 和 meshLambertMaterial 組件來渲染 3D 盒子。這三個組件協同工作以創建盒子的形狀。
  • boxBufferGeometry 組件創建盒子,此代碼將 meshLambertMaterial 組件的顏色屬性設置為粉紅色。
  • 然後它會渲染 Canvas 元素,該元素包含帶有環境光、聚光燈和 Orbit Controls 組件屬性集的盒子組件。
  • 環境光組件屬性為畫布添加柔光。spotLight 組件從特定位置以 0.3 的角度添加聚焦光。最後,OrbitControls 組件可讓您控制 3D 對象周圍的相機。

在 index.js 文件中導入並呈現 app.js 組件,然後啟動開發服務器以在瀏覽器中的 http://localhost:3000 中查看結果。

React Rendered 3D 粉紅色盒子形狀

渲染 Blender 創建的 3D 模型

Blender 是一個開源工具,供不同領域的創意人員用來創建 3D 模型、視覺效果和交互式 3D 應用程序。您可以使用 Blender 為您的 Web 應用程序創建 3D 模型。

在本教程中,您將通過Sketchfab上可用的 SRT 性能渲染 BMW 3D 模型。

寶馬 8 3D 模型在 sketchfab
圖片來源:RadeonGamer/ Sketchfab
Creative Commons Attribution

首先,從 Sketchfab 下載 GLTF(GL 傳輸格式)的模型。這種格式使得在瀏覽器上渲染 3D 模型變得容易。下載完成後,打開模型的文件夾並將模型的文件移動到 React 應用程序內的公共目錄。

現在,轉到您的 app.js 文件並使用以下代碼填充它。

  • 導入以下組件: import {useGLTF, Stage, PresentationControls} from "@react-three/drei";
  • 創建模型組件並添加以下代碼: function Model(props){
      const {scene} = useGLTF("/bmw.glb");
      return <primitive object={scene} {...props} />
    }

    export default function App() {
      return (
        <div className="App">
          <div className="App-header">
            <Canvas
              dpr={[1,2]}
              shadows camera={{fav: 45}}
              style={{"position": "absolute"}}
            >
              <PresentationControls
                speed={1.5}
                global zoom={0.5}
                polar={[-0.1, Math.PI / 4]}
              >
                <Stage environment={null}>
                  <Model scale={0.01} />
                </Stage>
              </PresentationControls>
            </Canvas>
          </div>
        </div>
      );
    }

  • React-three-drei 庫中的 useGLTF 鉤子定義了一個場景變量,並為其分配位於路徑“/bmw.glb”的模型文件的值。然後該組件返回一個為 3D 模型佈置場景的原始對象。
  • Canvas 元素渲染構成模型的主要組件,具有指定的屬性,例如設備像素比 (DPR)、陰影、相機角度和样式。
  • 然後指定 PresentationControls 組件的屬性,例如速度和全局縮放。這些屬性定義了您將如何控制屏幕上的模型。
  • 最後,配置將模型安裝在瀏覽器屏幕上的 Stage 組件。

啟動開發服務器以更新應用程序上的更改。您應該會看到在瀏覽器上呈現的模型。

反應渲染 3D 模型

在 Web 應用程序中渲染 3D 模型

在您的 Web 應用程序中渲染 3D 模型可以提供多種好處,例如通過提供更逼真的交互式 3D 感覺來改善用戶體驗。因此,用戶可以更好地與產品互動。

然而,渲染 3D 元素可能有其缺點,例如對應用程序的性能產生負面影響。3D 模型需要更多資源來呈現,這可能會導致您的應用加載速度變慢。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *