Vue3 + Three.js 極速入門:打造你的第一個3D可視化項目

文章目錄

  • 前言
  • 一、環境準備
    • 1.1 創建Vue3項目
    • 1.2 安裝Three.js
  • 二、Three.js核心概念速覽
  • 三、實戰:創建旋轉立方體
    • 3.1 組件化初始化
  • 四、核心代碼解析
    • 4.1 Vue3響應式整合技巧
    • 4.2 性能優化要點
  • 五、進階功能擴展
    • 5.1 數據驅動控制
    • 5.2 加載3D模型
  • 六、常見問題解決
  • 七、資源推薦
  • 八、結語🌟


在這里插入圖片描述

前言

Three.js 作為強大的 WebGL 庫,配合 Vue3 的響應式特性,能輕松創建交互式3D可視化應用。本文將通過20分鐘快速入門,帶你掌握 Vue3Three.js 的整合技巧,并提供可運行的代碼示例。

  • threejs官網:https://threejs.org/
  • Threejs官網中文文檔:https://threejs.org/docs/index.html#manual/zh/
  • threejs中文網:http://www.webgl3d.cn/
  • threejs基礎教程:http://www.webgl3d.cn/pages/aac9ab/
  • webgl基礎教程:http://www.webgl3d.cn/pages/9bc0db/
  • threejs數學幾何計算:http://www.webgl3d.cn/pages/001888/
  • threejs shader:http://www.webgl3d.cn/pages/d30795/
  • blender基礎:http://www.webgl3d.cn/pages/00cfc0/

一、環境準備

1.1 創建Vue3項目

npm create vue@latest
# 選擇默認配置
cd your-project
npm install

1.2 安裝Three.js

npm install three @types/three

二、Three.js核心概念速覽

概念作用Vue3對應思路
Scene3D場景容器組件容器
Camera觀察視角響應式坐標
Renderer渲染器Canvas DOM綁定
Geometry幾何形狀數據驅動
Material材質外觀響應式樣式
Mesh幾何體+材質的可渲染對象動態組件

三、實戰:創建旋轉立方體

3.1 組件化初始化

<template><div ref="canvasContainer" class="canvas-container"></div>
</template><script setup>
import { ref, onMounted, onUnmounted } from 'vue'
import * as THREE from 'three'const canvasContainer = ref(null)
let scene, camera, renderer, cube// 初始化場景
function initScene() {// 1. 創建場景scene = new THREE.Scene()// 2. 創建相機(透視相機)camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight,0.1,1000)camera.position.z = 5// 3. 創建渲染器renderer = new THREE.WebGLRenderer({ antialias: true })renderer.setSize(window.innerWidth, window.innerHeight)// 4. 掛載到DOMcanvasContainer.value.appendChild(renderer.domElement)
}// 創建立方體
function createCube() {const geometry = new THREE.BoxGeometry(1, 1, 1)const material = new THREE.MeshBasicMaterial({ color: 0x00ff00,wireframe: true })cube = new THREE.Mesh(geometry, material)scene.add(cube)
}// 動畫循環
function animate() {requestAnimationFrame(animate)cube.rotation.x += 0.01cube.rotation.y += 0.01renderer.render(scene, camera)
}onMounted(() => {initScene()createCube()animate()
})// 組件卸載時清理資源
onUnmounted(() => {if (renderer) {renderer.dispose()canvasContainer.value.removeChild(renderer.domElement)}
})
</script><style>
.canvas-container {width: 100vw;height: 100vh;margin: 0;overflow: hidden;
}
</style>

四、核心代碼解析

4.1 Vue3響應式整合技巧

  • 使用 ref 綁定DOM容器
  • onMounted 生命周期初始化 Three.js
  • 通過 requestAnimationFrame 實現流暢動畫
  • onUnmounted 中執行資源清理

4.2 性能優化要點

// 窗口大小自適應
window.addEventListener('resize', () => {camera.aspect = window.innerWidth / window.innerHeightcamera.updateProjectionMatrix()renderer.setSize(window.innerWidth, window.innerHeight)
})

五、進階功能擴展

5.1 數據驅動控制

<script setup>
import { ref } from 'vue'const cubeColor = ref('#00ff00')// 監聽顏色變化
watch(cubeColor, (newVal) => {cube.material.color.set(newVal)
})
</script><template><input type="color" v-model="cubeColor">
</template>

5.2 加載3D模型

import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'const loader = new GLTFLoader()
loader.load('model.glb', (gltf) => {scene.add(gltf.scene)
})

六、常見問題解決

Q1:頁面出現多個canvas疊加?
? 在 onUnmounted 中確保移除 DOM 節點

Q2:物體顯示黑色?
? 檢查材質類型是否需要添加燈光

Q3:內存泄漏?
? 顯式清理 geometrymaterial

geometry.dispose()
material.dispose()

七、資源推薦

  • Three.js官方文檔
  • Vue3組合式API指南
  • Three.js案例庫

八、結語🌟

通過本文的實踐,你已經掌握了 Vue3Three.js 整合的基本方法。后續可繼續探索:

  • 添加交互控制(鼠標旋轉/縮放)
  • 實現復雜材質效果
  • 結合Vuex進行狀態管理

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

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

相關文章

【設計模式】享元模式(輕量級模式) 單純享元模式和復合享元模式

享元模式&#xff08;Flyweight Pattern&#xff09;詳解一、享元模式簡介 享元模式&#xff08;Flyweight Pattern&#xff09; 是一種 結構型設計模式&#xff08;對象結構型模式&#xff09;&#xff0c;它通過共享技術實現相同或相似對象的重用&#xff0c;以減少內存占用和…

驅動開發_2.字符設備驅動

目錄1. 什么是字符設備2. 設備號2.1 設備號概念2.2 通過設備號dev分別獲取主、次設備號的宏函數2.3 主設備號的申請靜態申請動態分配2.4 注銷設備號3. 字符設備3.1 注冊字符設備3.2 注銷字符設備3.3 應用程序和驅動程序的關系3.4 file_opertaions結構體3.5 class_create3.6 創建…

直播推流技術底層邏輯詳解與私有化實現方案-以rmtp rtc hls為例-優雅草卓伊凡

直播推流技術底層邏輯詳解與私有化實現方案-以rmtp rtc hls為例-優雅草卓伊凡由于我們的甲方客戶要開始為我們項目產品上加入私有化的直播&#xff0c;這塊不得不又撿起來曾經我們做直播推流的事情了&#xff0c;其實私有化直播一直并不是一件容易的事情&#xff0c;現在大部分…

一文讀懂現代卷積神經網絡—深度卷積神經網絡(AlexNet)

目錄 深度卷積神經網絡&#xff08;AlexNet&#xff09;是什么&#xff1f; 一、AlexNet 的核心創新 1. 深度架構 2. ReLU 激活函數 3. 數據增強 4. Dropout 正則化 5. GPU 并行計算 6. 局部響應歸一化&#xff08;LRN&#xff09; 二、AlexNet 的網絡結構 三、AlexN…

JVM 垃圾收集算法全面解析

1. 引言1.1 為什么需要垃圾收集&#xff1f;在Java應用中&#xff0c;垃圾收集&#xff08;Garbage Collection&#xff0c;GC&#xff09;是一個至關重要的機制&#xff0c;它使得開發者不需要手動管理內存。與傳統的語言&#xff08;如C或C&#xff09;不同&#xff0c;Java通…

Vmware中安裝的CentOS7如何擴展硬盤大小

起初創建虛擬機時&#xff0c;大小設置不合理&#xff0c;導致我在嘗試開源項目時空間不足重新擴展硬盤&#xff0c;不僅需要在虛擬機設置中配置&#xff0c;還需要在系統內重新進行分區一、虛擬機設置打開虛擬機設置→硬盤→擴展&#xff0c;將大小設置為自己期望的大小&#…

Python+MongoDB高效開發組合

如大家所知&#xff0c;Python與MongoDB的結合是一種高效的開發組合&#xff0c;主要用于通過Python進行數據存儲、查詢及管理&#xff0c;利用MongoDB的文檔型數據庫特性實現靈活的數據處理。下面讓 Python 連接上 MongoDB&#xff1a;安裝 PyMongo&#xff1a;pip3 install p…

【論文閱讀】Masked Autoencoders Are Effective Tokenizers for Diffusion Models

introduce什么樣的 latent 空間更適合用于擴散模型&#xff1f;作者發現&#xff1a;相比傳統的 VAE&#xff0c;結構良好、判別性強的 latent 空間才是 diffusion 成功的關鍵。研究動機&#xff1a;什么才是“好的 latent 表征”&#xff1f;背景&#xff1a;Diffusion Models…

每日一SQL 【游戲玩法分析 IV】

文章目錄問題案例執行順序使用分組解決問題 案例 執行順序 SQL 語句的執行順序&#xff08;核心步驟&#xff09; 同一層級的select查詢內部, 別名在整個 SELECT 計算完成前不生效 使用分組解決 select distinct s.product_id, Product.product_name from Sales sleft join …

內部文件審計:企業文件服務器審計對網絡安全提升有哪些幫助?

企業文件服務器審計工作不僅對提升企業網絡信息安全起到重要作用&#xff0c;還能對企業內部網絡文件信息是否合規進行判斷。因此企業文件服務器審計一直被高度重視。 一、文件服務器為何成為攻擊焦點&#xff1f; 企業文件服務器通常集中存儲財務報表、人事檔案、研發資料、客…

FusionOne HCI 23 超融合實施手冊(超聚變超融合)

產品介紹 FusionOne HCI作為實現企業信息一體化的IT基礎設施平臺&#xff0c;以“軟硬件垂直深度集成和調優”、“快速部署”、“統一管理”的理念&#xff0c;提供應用融合部署&#xff0c;提升核心業務運作效率&#xff0c;降低整體采購成本。 FusionOne HCI代表了IT產品的…

AI算姻緣測算小工具流量主微信小程序開源

功能特點 響應式設計&#xff1a;完美適配各種移動設備屏幕尺寸 精美UI界面&#xff1a; 柔和的粉紅色漸變背景 圓角卡片設計 精心設計的字體和間距 愛心圖標點綴 動態效果&#xff1a; 點擊按鈕時的動畫反饋 測算結果的平滑過渡動畫 愛心漂浮動畫 進度條動態填充 AI測算功能&a…

Vue獲取上傳Excel文件內容并展示在表格中

一、安裝依賴 npm install xlsx 二、引用依賴 import XLSX from xlsx 三、代碼實現 1、注意&#xff1a;函數 analysis 中reader.readAsBinaryString(file)&#xff0c;file的數據格式如圖所示 2、示例代碼 <!-- 項目使用的前端框架為非流行框架&#xff0c;主要關注…

pipelineJob和pipeline的關系

pipelineJob與pipeline在Jenkins體系中構成配置層與執行層的協同關系,具體關聯如下: 一、核心功能定位 概念作用實現層級pipelineJob定義Job的元數據(如SCM配置、日志策略)配置層pipeline描述實際構建流程(如階段劃分、并行任務)執行層scriptPath橋梁作用:將配置層定義…

第二十篇 Word文檔自動化:Python批量生成、模板填充與內容修改,告別繁瑣排版!

python實現word 自動化重復性文檔制作&#xff0c;手動填充模板&#xff0c;效率低下還易錯1.python-docx入門&#xff1a;Word文檔的“瑞士軍刀”&#xff01;1.1 安裝與基礎概念&#xff1a;文檔、段落、運行、表格1.2 打開/創建Word文檔&#xff1a;Python與Word的初次接觸1…

【C# in .NET】7. 探秘結構體:值類型的典型代表

探秘結構體&#xff1a;值類型的典型代表 在 C# 的類型系統中&#xff0c;結構體&#xff08;Struct&#xff09;作為值類型的典型代表&#xff0c;一直扮演著既基礎又微妙的角色。許多開發者在日常編碼中雖頻繁使用結構體&#xff08;如int、DateTime等&#xff09;&#xff0…

深入探討Hadoop YARN Federation:架構設計與實踐應用

Hadoop YARN Federation簡介基本概念與設計初衷Hadoop YARN Federation作為Apache Hadoop 3.x版本的核心特性之一&#xff0c;其本質是通過多集群聯合管理機制突破單點資源管理器的性能瓶頸。傳統YARN架構中&#xff0c;單個ResourceManager&#xff08;RM&#xff09;需要管理…

STM32固件升級設計——SD卡升級固件

目錄 概述 一、功能描述 1、BootLoader部分&#xff1a; 2、APP部分&#xff1a; 二、BootLoader程序制作 1、分區定義 2、 主函數 3、SD卡升級文件檢測和更新 4、程序跳轉 三、APP程序制作 四、工程配置&#xff08;默認KEIL5&#xff09; 五、運行測試 結束語…

基于Python的圖像文字識別系統

主要語言&#xff1a;Python數據庫&#xff1a;SQLiteUI界面&#xff1a;PYQT5文字識別模型&#xff1a;Tesseract OCR&#xff08;本地搭建&#xff09;主要功能&#xff1a;登錄注冊&#xff1a;登錄注冊功能。圖片管理&#xff1a;單張/多張上傳、圖片列表、預覽、刪除、切換…

028_分布式部署架構

028_分布式部署架構 概述 本文檔介紹如何設計和實現Claude應用的分布式部署架構&#xff0c;包括負載均衡、緩存策略、服務發現、容錯機制等。 微服務架構設計 1. 服務拆分策略 from abc import ABC, abstractmethod from typing import Dict, Any, Optional import asyncio im…