在 React 項目中安裝和配置 Three.js

React 與 Three.js 的結合 :通過 React 管理組件化結構和應用邏輯,利用 Three.js 實現 3D 圖形的渲染與交互。使用這種方法,我們可以在保持代碼清晰和結構化的同時,實現令人驚嘆的 3D 效果。

在本文中,我們將以一個簡單的示例為基礎,詳細講解如何在 React 項目中集成 Three.js,并創建一個動態的 3D 場景。

本文介紹使用最原始的three,如果想了解 react-three-fiber 可以參考這篇文章:https://mp.weixin.qq.com/s/y0gsws7DqvbT_iZRasenkA?token=1707814885&lang=zh_CN

安裝依賴并設置項目

使用 Vite 初始化項目,并安裝 Three.js:

# 創建項目
npm create vite threejs-react-demo --template react# 進入項目目錄
cd threejs-react-app# 安裝 Three.js
npm install three

項目目錄結構

我們將創建以下目錄結構:

src/
├── components/       # 存放 React 組件
│   ├── ThreeScene.jsx # Three.js 場景組件
├── App.jsx           # 入口文件
└── main.jsx          # React 渲染入口

創建 Three.js 場景

1. 創建 ThreeScene.jsx
import React, { useEffect, useRef } from 'react';
import * as THREE from 'three';const ThreeScene = () => {const containerRef = useRef(null);useEffect(() => {// 獲取容器元素const container = containerRef.current;// 創建場景const scene = new THREE.Scene();// 創建相機const camera = new THREE.PerspectiveCamera(75,container.clientWidth / container.clientHeight,0.1,1000);camera.position.z = 5;// 創建渲染器const renderer = new THREE.WebGLRenderer();renderer.setSize(container.clientWidth, container.clientHeight);container.appendChild(renderer.domElement);// 添加一個立方體const geometry = new THREE.BoxGeometry();const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });const cube = new THREE.Mesh(geometry, material);scene.add(cube);// 動畫函數const animate = () => {requestAnimationFrame(animate);// 旋轉立方體cube.rotation.x += 0.01;cube.rotation.y += 0.01;renderer.render(scene, camera);};animate();// 窗口尺寸調整const handleResize = () => {camera.aspect = container.clientWidth / container.clientHeight;camera.updateProjectionMatrix();renderer.setSize(container.clientWidth, container.clientHeight);};window.addEventListener('resize', handleResize);// 清理return () => {window.removeEventListener('resize', handleResize);container.removeChild(renderer.domElement);};}, []);return <div ref={containerRef} style={{ width: '100%', height: '100vh' }} />;
};export default ThreeScene;
2. 修改 App.jsx

ThreeScene 組件引入應用中。

import React from 'react';
import ThreeScene from './components/ThreeScene';function App() {return (<div><h1 style={{ textAlign: 'center' }}>React + Three.js 示例</h1><ThreeScene /></div>);
}export default App;

運行項目

運行以下命令啟動開發服務器:

npm run dev

打開瀏覽器訪問 http://localhost:5173,你將看到一個旋轉的綠色立方體。

在這里插入圖片描述

在本文中,我們將以一個簡單的示例為基礎,詳細講解如何在 React 項目中集成 Three.js,并創建一個動態的 3D 場景。無論你是剛接觸 3D 開發,還是已有一定經驗,相信都能從中有所收獲。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64439.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64439.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64439.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Lucene 漏洞歷險記:修復損壞的索引異常

作者&#xff1a;來自 Elastic Benjamin Trent 有時&#xff0c;一行代碼需要幾天的時間才能寫完。在這里&#xff0c;我們可以看到工程師在多日內調試代碼以修復潛在的 Apache Lucene 索引損壞的痛苦。 做好準備 這篇博客與往常不同。它不是對新功能或教程的解釋。這是關于花…

嵌入式硬件面試題

1、請問什么是通孔、盲孔和埋孔&#xff1f;孔徑多大可以做機械孔&#xff0c;孔徑多小必須做激光孔&#xff1f;請問激光微型孔可以直接打在元件焊盤上嗎&#xff0c;為什么&#xff1f; 通孔是貫穿整個PCB的過孔&#xff0c;盲孔是從PCB表層連接到內層的過孔&#xff0c;埋孔…

基礎的基礎之 pillow與opencv相比的特點與優缺點比較

Pillow 和 OpenCV 都是人工智能圖像處理的必不可少的常用庫&#xff0c;但它們有各自的特點和適用場景。 以下是它們的主要特點、優缺點以及適用場景的對比&#xff1a; 1. Pillow&#xff08;Python Imaging Library&#xff09; Pillow 是一個輕量級的圖像處理庫&#xff0…

深度學習J6周 ResNeXt-50實戰解析

&#x1f368; 本文為&#x1f517;365天深度學習訓練營中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 本周任務&#xff1a; 1.閱讀ResNeXt論文&#xff0c;了解作者的構建思路 2.對比之前介紹的ResNet50V2、DenseNet算法 3.復現ResNeXt-50算法 一、模型結構…

Langchain Chat Model 和 Chat Prompt Template

0. 簡介 Chat Model 不止是一個用于聊天對話的模型抽象&#xff0c;更重要的是提供了多角色提示能力&#xff08;System,AI,Human,Function)。 Chat Prompt Template 則為開發者提供了便捷維護不同角色的提示模板與消息記錄的接口。 1. 構造 ChatPromptTemplate from langch…

對話 Project Astra 研究主管:打造通用 AI 助理,主動視頻交互和全雙工對話是未來重點

Project Astra 愿景之一&#xff1a;「系統不僅能在你說話時做出回應&#xff0c;還能在持續的過程中幫助你。」 近期&#xff0c;Google DeepMind 的 YouTube 頻道采訪了 Google DeepMind 研究主管格雷格韋恩 (Greg Wayne)。 格雷格韋恩的研究工作為 DeepMind 的諸多突破性成…

全國青少年信息學奧林匹克競賽(信奧賽)備考實戰之循環結構(for循環語句)(四)

實戰訓練1—最大差值 問題描述&#xff1a; 輸入n個非負整數&#xff0c;找出這個n整數的最大值與最小值&#xff0c;并求最大值和最小值的差值。 輸入格式&#xff1a; 共兩行&#xff0c;第一行為整數的個數 n&#xff08;1≤n≤1000)。第二行為n個整數的值&#xff08;整…

純Dart Flutter庫適配HarmonyOS

純Dart Flutter庫適配HarmonyOS介紹&#xff1a; Flutter基本組件、Flutter布局組件、Flutter圖片組件、Flutter字體、Flutter圖標、Fluter路由、flutter動畫、 Flutter表單、flutter異步等&#xff0c;純Dart庫無需任何處理&#xff0c;可以直接編譯成HarmonyOs應用。 具體步…

LunarVim安裝

LunarVim以其豐富的功能和靈活的定制性&#xff0c;迅速在Nvim用戶中流行開來。它不僅提供了一套完善的默認配置&#xff0c;還允許用戶根據自己的需求進行深度定制。無論是自動補全、內置終端、文件瀏覽器&#xff0c;還是模糊查找、LSP支持、代碼檢測、格式化和調試&#xff…

劍指Offer|LCR 015. 找到字符串中所有字母異位詞

LCR 015. 找到字符串中所有字母異位詞 給定兩個字符串 s 和 p&#xff0c;找到 s 中所有 p 的 變位詞 的子串&#xff0c;返回這些子串的起始索引。不考慮答案輸出的順序。 變位詞 指字母相同&#xff0c;但排列不同的字符串。 示例 1&#xff1a; 輸入: s "cbaebaba…

高質量 Next.js 后臺管理模板源碼分享,開發者必備

高質量 Next.js后臺管理模板源碼分享&#xff0c;開發者必備 Taplox 是一個基于 Bootstrap 5 和 Next.js 構建的現代化后臺管理模板和 UI 組件庫。它不僅設計精美&#xff0c;還提供了一整套易用的工具&#xff0c;適合各種 Web 應用、管理系統和儀表盤項目。無論你是初學者還是…

開發場景中Java 集合的最佳選擇

在 Java 開發中&#xff0c;集合類是處理數據的核心工具。合理選擇集合&#xff0c;不僅可以提高代碼效率&#xff0c;還能讓代碼更簡潔。本篇文章將重點探討 List、Set 和 Map 的適用場景及優缺點&#xff0c;幫助你在實際開發中找到最佳解決方案。 一、List&#xff1a;有序存…

Java包裝類型的緩存

Java 基本數據類型的包裝類型的大部分都用到了緩存機制來提升性能。 Byte,Short,Integer,Long 這 4 種包裝類默認創建了數值 [-128&#xff0c;127] 的相應類型的緩存數據&#xff0c;Character 創建了數值在 [0,127] 范圍的緩存數據&#xff0c;Boolean 直接返回 True or Fal…

工程師 - MinGW

MinGW Minimalist GNU for Windows&#xff0c;前身為mingw32&#xff0c;是一個免費開源的軟件開發環境&#xff0c;從2010年開始項目停止并不再使用。后續提供MinGW-w64。 MinGW包括: - 移植到Windows上的GNU編譯器集&#xff08;GCC&#xff09;&#xff0c;包括C、C、ADA和…

EasyExcel(讀取操作和填充操作)

文章目錄 1.準備Read.xlsx&#xff08;具有兩個sheet&#xff09;2.讀取第一個sheet中的數據1.模板2.方法3.結果 3.讀取所有sheet中的數據1.模板2.方法3.結果 EasyExcel填充1.簡單填充1.準備 Fill01.xlsx2.無模版3.方法4.結果 2.列表填充1.準備 Fill02.xlsx2.模板3.方法4.結果 …

CKA認證 | Day7 K8s存儲

第七章 Kubernetes存儲 1、數據卷與數據持久卷 為什么需要數據卷&#xff1f; 容器中的文件在磁盤上是臨時存放的&#xff0c;這給容器中運行比較重要的應用程序帶來一些問題。 問題1&#xff1a;當容器升級或者崩潰時&#xff0c;kubelet會重建容器&#xff0c;容器內文件會…

Python調用R語言中的程序包來執行回歸樹、隨機森林、條件推斷樹和條件推斷森林算法

要使用Python調用R語言中的程序包來執行回歸樹、隨機森林、條件推斷樹和條件推斷森林算法&#xff0c;重新計算中國居民收入不平等&#xff0c;并進行分類匯總&#xff0c;我們可以使用rpy2庫。rpy2允許在Python中嵌入R代碼并調用R函數。以下是一個詳細的步驟和示例代碼&#x…

關于JAVA方法值傳遞問題

1.1 前言 之前在學習C語言的時候&#xff0c;將實參傳遞給方法&#xff08;或函數&#xff09;的方式分為兩種&#xff1a;值傳遞和引用傳遞&#xff0c;但在JAVA中只有值傳遞&#xff08;顛覆認知&#xff0c;基礎沒學踏實&#xff09; 參考文章&#xff1a;https://blog.csd…

Excel基礎知識

一&#xff1a;數組 一行或者一列數據稱為一維數組&#xff0c;多行多列稱為二維數組&#xff0c;數組支持算術運算&#xff08;如加減乘除等&#xff09;。 行&#xff1a;{1,2,3,4} 數組中的每個值用逗號分隔列&#xff1a;{1;2;3;4} 數組中的每個值用分號分隔行列&#xf…

基于DIODES AP43781+PI3USB31531+PI3DPX1207C的USB-C PD Video 之全功能顯示器連接端口方案

隨著USB-C連接器和PD功能的出現&#xff0c;新一代USB-C PD PC顯示器可以用作個人和專業PC工作環境的電源和數據集線器。 雖然USB-C PD顯示器是唯一插入墻壁插座的交流電源輸入設備&#xff0c;但它可以作為數據UFP&#xff08;上游接口&#xff09;連接到連接到TCD&#xff0…