如何在 Vue.js 中集成 Three.js —— 創建一個旋轉的 3D 立方體

在這篇文章中,我將向大家展示如何將 Three.js 與 Vue.js 結合,創建一個簡單的 3D 場景,并展示一個旋轉的立方體。通過這個簡單的示例,你將學習到如何在 Vue 項目中集成 Three.js,以及如何創建動態的 3D 內容。

1. 安裝 Three.js

首先,我們需要在項目中安裝 Three.js。你可以使用 npm 或 yarn 來安裝它。打開終端,進入你的 Vue 項目目錄,運行以下命令:

npm i three
2. 創建 Vue 組件

接下來,我們創建一個 Vue 組件來渲染 3D 立方體。在這個組件中,我們將通過 Three.js 來創建場景、相機、渲染器,以及一個旋轉的立方體。

<template><div ref="threeCanvas" style="width: 100%; height: 100%"></div>
</template><script>
import { ref, onMounted, onBeforeUnmount } from 'vue';
import * as THREE from 'three';export default {name: 'ThreeExample',setup() {const threeCanvas = ref(null);onMounted(() => {// 創建一個 Three.js 場景const scene = new THREE.Scene();// 創建透視相機const camera = new THREE.PerspectiveCamera(75, // 視野角度window.innerWidth / window.innerHeight, // 寬高比0.1, // 最近可視距離1000 // 最遠可視距離);// 創建 WebGL 渲染器const renderer = new THREE.WebGLRenderer();renderer.setSize(window.innerWidth, window.innerHeight); // 設置渲染器大小threeCanvas.value.appendChild(renderer.domElement); // 將渲染器添加到 DOM// 創建一個綠色的立方體const geometry = new THREE.BoxGeometry(1, 1, 1); // 創建立方體幾何體const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); // 創建材質const cube = new THREE.Mesh(geometry, material); // 創建網格對象(立方體)scene.add(cube); // 將立方體添加到場景中// 設置相機的位置camera.position.z = 5;// 動畫渲染函數const animate = function () {requestAnimationFrame(animate); // 請求下一幀動畫// 旋轉立方體cube.rotation.x += 0.01;cube.rotation.y += 0.01;// 渲染場景renderer.render(scene, camera);};animate(); // 啟動動畫// 處理窗口尺寸變化const handleResize = () => {const width = window.innerWidth;const height = window.innerHeight;// 更新渲染器大小renderer.setSize(width, height);// 更新相機的縱橫比camera.aspect = width / height;camera.updateProjectionMatrix();};// 監聽窗口大小變化window.addEventListener('resize', handleResize);// 清理資源onBeforeUnmount(() => {window.removeEventListener('resize', handleResize);renderer.dispose();});});return {threeCanvas};}
};
</script><style scoped>
/* 可以根據需要添加一些樣式 */
</style>
3. 代碼解析
3.1 創建 Three.js 場景和相機
  • scene:我們首先創建了一個 Three.js 的場景,它是所有 3D 對象的容器。

  • camera:然后我們創建了一個透視相機,設置了視野角度、縱橫比、最近可視距離和最遠可視距離。相機的位置會影響我們看到的場景。

3.2 創建渲染器

我們使用了 THREE.WebGLRenderer 創建了一個 WebGL 渲染器,并通過 setSize 方法設置了渲染器的寬度和高度,使得渲染器能夠適應瀏覽器窗口的尺寸。

3.3 創建 3D 立方體

接著,我們創建了一個 THREE.BoxGeometry 立方體幾何體,并為它指定了一個綠色的材質 THREE.MeshBasicMaterial。最后,通過 THREE.Mesh 將幾何體和材質組合成一個 3D 物體,并將其添加到場景中。

3.4 動畫效果

為了讓立方體旋轉,我們創建了一個 animate 函數,并通過 requestAnimationFrame 來使動畫保持連續運行。在每一幀中,立方體會順時針旋轉,效果非常流暢。

3.5 處理窗口尺寸變化

為了響應窗口尺寸變化,我們監聽了 resize 事件。當窗口大小發生變化時,我們會調整渲染器的尺寸,并重新計算相機的縱橫比,以確保畫面不會變形。

3.6 組件銷毀時的清理工作

當組件銷毀時,我們會移除 resize 事件監聽器,并釋放渲染器的資源,以避免內存泄漏。

4. 結果展示

當你在頁面中加載這個 Vue 組件時,你會看到一個綠色的立方體,它會隨著頁面加載而旋轉。并且當你調整瀏覽器窗口大小時,立方體的顯示效果會自動調整。

?

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

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

相關文章

DeepSeek?R1-0528 重磅升級:螞蟻百寶箱免費、無限量調用

DeepSeek?R1-0528 重磅升級&#xff1a;螞蟻百寶箱免費、無限量調用 端午假期前一天&#xff0c;DeepSeek?R1 更新到了 0528 版本&#xff01; 官方說明&#xff1a;0528 版本在深度思考與推理能力方面顯著增強——在數學、編程與通用邏輯等多項基準測評中&#xff0c;表現已…

RS232轉Profinet網關在檢漏儀與西門子PLC里的應用

RS232轉Profinet網關在檢漏儀與西門子PLC里的應用 在工業自動化和控制領域&#xff0c;設備間的高效通信至關重要。RS232轉Profinet網關作為一種關鍵的轉換工具&#xff0c;能夠將傳統的RS232接口設備接入現代化的Profinet網絡&#xff0c;從而實現數據的無縫傳輸和設備的遠程…

jenkins-jenkins簡介

一、簡介 jenkins是一個可擴展的持續集成引擎。持續集成&#xff0c;也就是通常所說的CI&#xff08;Continues Integration&#xff09;&#xff0c;可以說是現代軟件技術開發的基礎。持續集成是一種軟件開發實踐&#xff0c; 即團隊開發成員經常集成他們的工作&#xff0c;通…

vue發版html 生成打包到docker鏡像進行發版

將Vue項目打包成Docker鏡像部署主要分為以下幾個步驟&#xff1a; 1. Vue項目打包? 執行npm run build生成dist文件夾&#xff0c;包含靜態資源文件 注意檢查index.html中資源引用路徑是否正確&#xff08;避免絕對路徑問題&#xff09; 2. 編寫Dockerfile Copy Code FROM…

掃地機器人苦尋新引擎,大疆們卻已攻入腹地

原創 科技新知 前沿科技組 作者丨江籬 編輯丨櫻木、九黎 競爭激烈的掃地機器人賽道&#xff0c;迎來了新玩家。 據近日相關報道&#xff0c;大疆掃地機器人產品已開始量產&#xff0c;預計將于6月份發布。消息稱大疆研發掃地機器人已超過四年&#xff0c;即將上市的產品是掃…

【C++】22. 紅黑樹封裝實現Mymap和Myset

上一章節我們實現了紅黑樹&#xff0c;這一章節我們就用紅黑樹封裝來實現一個我們自己的map和set 1. 源碼及框架分析 SGI-STL 3.0版本的源代碼中&#xff0c;map和set的實現主要分布在若干頭文件中&#xff0c;這些頭文件構成了這兩個容器的完整實現架構&#xff1a; 核心頭文…

02_redis分布式鎖原理

文章目錄 一、redis如何實現分布式鎖1. 使用 SETNX 命令2. 設置過期時間3. 釋放鎖4. 注意事項5. 示例代碼二、Java中分布式鎖如何設置超時時間1. Redis分布式鎖2. 基于Zookeeper的分布式鎖3. 基于數據庫的分布式鎖注意事項一、redis如何實現分布式鎖 Redis 實現分布式鎖是一種…

酷派Cool20/20S/30/40手機安裝Play商店-谷歌三件套-GMS方法

酷派Cool系列主打低端市場&#xff0c;系統無任何GMS程序&#xff0c;也不支持直接開啟或者安裝谷歌服務等功能&#xff0c;對于國內部分經常使用谷歌服務商店的小伙伴非常不友好。涉及機型有酷派Cool20/Cool20S /30/40/50/60等旗下多個設備。好在這些機型運行的系統都是安卓11…

技術為器,服務為本:AI時代的客服價值重構

在智能化浪潮中&#xff0c;大語言模型的出現為客戶服務行業注入了全新動能。然而技術創新的價值不在于技術本身&#xff0c;而在于其賦能服務的深度與廣度。AI對于我們來說&#xff0c;如同發動機之于汽車&#xff0c;重要的不是引擎參數&#xff0c;而是整車帶給用戶的駕駛體…

技術創新如何賦能音視頻直播行業?

在全球音視頻直播行業的快速發展中&#xff0c;技術的持續創新始終是推動行業進步的核心動力。作為大牛直播SDK的開發者&#xff0c;我很榮幸能分享我們公司如何從產品的維度出發&#xff0c;精準把握市場需求&#xff0c;并不斷推動產品的發展&#xff0c;以滿足不斷變化的行業…

Linux線程池(下)(34)

文章目錄 前言一、v3版本二、單例模式概念特點簡單實現 三、其余問題STL線程安全問題智能指針線程安全問題其他鎖的概念 總結 前言 加油&#xff01;&#xff01;&#xff01; 一、v3版本 「優化版」&#xff1a;從任務隊列入手&#xff0c;引入 「生產者消費者模型」&#xff…

Netty 實戰篇:Netty RPC 框架整合 Spring Boot,邁向工程化

本文將基于前面構建的 RPC 能力&#xff0c;嘗試將其與 Spring Boot 整合&#xff0c;借助注解、自動掃描、依賴注入等機制&#xff0c;打造“開箱即用”的 Netty RPC 框架&#xff0c;提升開發效率與工程規范。 一、為什么要整合 Spring Boot&#xff1f; 手動 new 實例、寫注…

Axure中繼器學習筆記

一、中繼器概述 中繼器(Axure Repeater)是Axure中的高級組件&#xff0c;功能類似于數據集成器&#xff0c;主要用于&#xff1a; 數據存儲與管理 數據的增刪改查操作 數據的分頁與展示控制 二、中繼器基本使用流程 數據存儲&#xff1a;將數據儲存在中繼器組件中 數據展…

hf-mirror斷點續傳下載權重

直接瀏覽器雙擊一個一個下載 這種方式不支持斷點續傳 dnf install git-lfs -y 下面成功跳過 LFS 權重下載只拿到 Git 元數據和 LFS 占位符文件了 GIT_LFS_SKIP_SMUDGE1 git clone https://hf-mirror.com/Tongyi-Zhiwen/QwenLong-L1-32B cd QwenLong-L1-32B git lfs install -…

【軟件安裝那些事 3 】CAD(2026 V60.7z) 安裝教程(中文簡體版)步驟完整不跳步 { 附軟件提取下載鏈接,永久有效---------百度網盤 }

通過網盤分享的文件&#xff1a;CAD2026 V60.7z 安裝包 中文 &#xff08;永久有效&#xff09; 鏈接: https://pan.baidu.com/s/122UXbOK9iGsD5Ld-lzrfAA?pwdneqd 提取碼: neqd 1、解壓完成后&#xff0c;打開【Setup】文件夾 2、鼠標右擊【Setup】…

RK3399 Android7.1增加應用安裝白名單機制

通過設置應用包名白名單的方式限制未授權的應用軟件安裝。 diff --git a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java index af9a533..ca…

體現物聯網環境下安全防護的緊迫性 :物聯網環境下的個人信息安全:隱憂與防護之道

摘要&#xff1a;隨著物聯網的飛速發展&#xff0c;個人信息在物聯網環境下面臨的安全風險日益嚴峻。本文深入探討了物聯網環境下個人信息泄露的主要途徑&#xff0c;分析了當前個人信息安全保護面臨的挑戰&#xff0c;并從技術、法律、企業責任和個人意識等多方面提出了相應的…

vue3 項目配置多語言支持,如何從服務端拿多語言配置

在 Vue3 項目中實現多語言支持并從服務端獲取配置&#xff0c;可以使用 Vue I18n 庫。在初始化階段可以發送請求獲取多語言配置或者通過本地文件加載json文件的方式&#xff0c;都可以實現。我這里是tauri項目&#xff0c;所以使用的是invoke從tauri端拿到配置文件&#xff0c;…

使用ssh-audit掃描ssh過期加密算法配置

使用ssh-audit掃描ssh過期加密算法配置 安裝檢查ssh的加密算法配置修改ssh的加密算法配置 安裝 # pip3安裝ssh-audit pip3 instal ssh-audit檢查ssh的加密算法配置 # 檢查ssh的配置 ssh-audit 192.168.50.149修改ssh的加密算法配置 # 查看ssh加密配置文件是否存在 ls /etc/c…

LeetCode 高頻 SQL 50 題(基礎版)之 【連接】部分 · 下

前五道題&#xff1a;LeetCode 高頻 SQL 50 題&#xff08;基礎版&#xff09;之 【連接】部分 上 題目&#xff1a;577. 員工獎金 題解&#xff1a; select r.name,b.bonus from Employee r left join Bonus b on r.empIdb.empId where b.bonus <1000 or b.bonus is nul…