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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…