在 Vue3 项目中安装和配置 Three.js

简介

Three.js 是一个轻量级的 WebGL 封装库,用于在浏览器中渲染复杂的 3D 图形。它提供了便捷的 API,可以快速构建 3D 场景、对象和动画。

Vue.js 是一个渐进式 JavaScript 框架,擅长构建用户界面。其响应式数据绑定和组件系统使得复杂的交互开发更加简单。

通过将 Three.js 和 Vue.js 结合,我们可以利用 Vue 的组件化和响应式特性,轻松管理和更新 3D 场景中的对象和状态,从而创建高效且交互性强的 3D 应用。

创建一个基于 Vite 的 Vue3 项目

初始化项目

pnpm create vite@latest vue-threejs-demo --template vue
cd vue-threejs-demo
npm install

安装 Three.js

npm install three

运行项目

npm run dev

至此,我们已经创建了一个基于 Vite 的 Vue3 项目,并安装了 Three.js 库。

在 Vue 组件中集成 Three.js

目录

以下是初始的目录结构

vue-threejs-demo/
├── src/
│   ├── assets/         # 放置静态资源
│   ├── components/     # 放置 Vue 组件
│   │   ├── ThreeScene.vue
│   ├── App.vue         # 应用根组件
│   ├── main.js         # 项目入口文件
│   └── styles/         # 可选:放置全局样式
├── public/             # 放置静态文件
├── package.json
├── vite.config.js
└── README.md

创建 ThreeScene.vue 组件

创建文件夹和文件: 在项目的 src/components 文件夹下,新建一个文件 ThreeScene.vue,用于管理 3D 场景逻辑。

src/
├── components/
│   └── ThreeScene.vue

在组件中初始化 Three.js 场景: 将以下代码复制到 ThreeScene.vue 文件中:

<template><div id="three-container"><canvas ref="threeCanvas"></canvas></div>
</template><script>
import * as THREE from "three";export default {name: "ThreeScene",mounted() {this.initThree();},methods: {initThree() {const canvas = this.$refs.threeCanvas;// 初始化场景、相机和渲染器const scene = new THREE.Scene();const camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000);camera.position.z = 5;const renderer = new THREE.WebGLRenderer({ canvas });renderer.setSize(window.innerWidth, window.innerHeight);// 创建一个立方体const geometry = new THREE.BoxGeometry();const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });const cube = new THREE.Mesh(geometry, material);scene.add(cube);// 动画循环function animate() {requestAnimationFrame(animate);cube.rotation.x += 0.01;cube.rotation.y += 0.01;renderer.render(scene, camera);}animate();},},
};
</script><style scoped>
#three-container {width: 100%;height: 100vh;
}
canvas {display: block;width: 100%;height: 100%;
}
</style>

修改 App.vue 文件

将 ThreeScene.vue 组件引入并使用。
App.vue 文件结构:

<template><div id="app"><ThreeScene /></div>
</template><script>
import ThreeScene from "./components/ThreeScene.vue";export default {name: "App",components: {ThreeScene,},
};
</script><style>
#app {margin: 0;padding: 0;overflow: hidden;
}
</style>

修改 main.js 文件

import { createApp } from "vue";
import App from "./App.vue";const app = createApp(App);
app.mount("#app");

完整的文件结构

完成上述步骤后,项目的文件结构应该类似于以下:

vue-threejs-demo/
├── src/
│   ├── assets/         # 可选:存放图片、材质等静态资源
│   ├── components/
│   │   └── ThreeScene.vue   # 3D 场景组件
│   ├── styles/         # 可选:全局样式文件夹
│   │   └── global.css  # 可选:定义全局 CSS 样式
│   ├── App.vue         # 根组件
│   ├── main.js         # 入口文件
├── public/             # 存放静态文件
│   └── index.html      # HTML 模板
├── package.json        # 项目信息
├── vite.config.js      # Vite 配置文件
└── README.md           # 项目说明

运行项目

完成后,运行以下命令启动开发服务器:

npm run dev

打开浏览器访问 http://localhost:5173 你将看到一个旋转的绿色立方体在页面中显示。

在这里插入图片描述

补充说明

  • 关于动态加载材质:将材质文件(如图片)放置在 src/assets 或 public 文件夹中,并通过 Three.js 的 TextureLoader 加载。

  • 关于响应式调整:可以监听窗口大小的变化,在 initThree 方法中加入如下代码:

window.addEventListener("resize", () => {camera.aspect = window.innerWidth / window.innerHeight;camera.updateProjectionMatrix();renderer.setSize(window.innerWidth, window.innerHeight);
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/494958.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编译原理复习---正则表达式+有穷自动机

适用于电子科技大学编译原理期末考试复习。 1. 正则表达式 正则表达式&#xff08;Regular Expression&#xff0c;简称regex或regexp&#xff09;是一种用于描述、匹配和操作文本模式的强大工具。它由一系列字符和特殊符号组成&#xff0c;这些字符和符号定义了一种搜索模式…

漏洞检测工具:HOST头部攻击

HOST头部攻击 漏洞定义 Host头部字段在HTTP协议中用于指定请求所针对的域名&#xff0c;以便服务器能够正确地将请求路由到相应的Web应用程序。攻击者通过篡改HTTP请求中的Host头部字段来执行恶意操作。 漏洞危害 Host头部攻击的危害在于它能导致敏感信息泄露、恶意内容执行…

ROS1入门教程6:复杂行为处理

一、新建项目 # 创建工作空间 mkdir -p demo6/src && cd demo6# 创建功能包 catkin_create_pkg demo roscpp rosmsg actionlib_msgs message_generation tf二、创建行为 # 创建行为文件夹 mkdir action && cd action# 创建行为文件 vim Move.action# 定义行为…

DL作业11 LSTM

习题6-4 推导LSTM网络中参数的梯度&#xff0c; 并分析其避免梯度消失的效果 LSTM&#xff08;长短期记忆网络&#xff09;是一种特殊的循环神经网络&#xff08;RNN&#xff09;&#xff0c;旨在解决普通 RNN 在处理长序列时遇到的梯度消失和梯度爆炸问题。它通过设计多个门…

WWW23-多行为级联|级联图卷积网络的多行为推荐

论文&#xff1a;https://arxiv.org/abs/2303.15720 代码&#xff1a;https://github.com/SS-00-SS/MBCGCN 这篇论文MB-CGCN和上一篇CRGCN是同一个团队的&#xff0c;都是级联的方式。一个用了残差&#xff0c;一个用了特征转换&#xff0c;文章最后有discussion讨论了两者的不…

JAVA开发入门学习七- 数组

数组的概念 概念 数组&#xff1a; 是多个相同类型数据按照一定排列的集合&#xff0c;并使用一个名字命名&#xff0c;并通过编号的方式对这些数据进行统一管理 数组中的概念 数组名&#xff1a; 数组的名称&#xff0c;命名 下标&#xff1a; 从0开始 元素&#xff1a;…

【编辑器扩展】打开持久化路径/缓存路径/DataPath/StreamingAssetsPath文件夹

代码 [MenuItem("Assets/Open Explorer/PersistentDataPath")]public static void OpenPersistentDataPath(){Application.OpenURL(Application.persistentDataPath);}[MenuItem("Assets/Open Explorer/DataPath")]public static void OpenDataPath(){Appl…

链路聚合与GVRP的混合构建(eNSP)

目录 拓扑图&#xff1a; 前置操作&#xff1a; GVRP全局开启&#xff1a; 查询&#xff1a; 实验背景&#xff1a;前面依次搭建了交换机的链路聚合实验手册以及动态vlan GVRP&#xff0c;为了模拟真实环境&#xff0c;本次实验将两者结合。 拓扑图&#xff1a; 前置操作&…

由于这些关键原因,我总是手边有一台虚拟机

概括 虚拟机提供了一个安全的环境来测试有风险的设置或软件,而不会影响您的主系统。设置和保存虚拟机非常简单,无需更改主要设备即可方便地访问多个操作系统。运行虚拟机可能会占用大量资源,但现代 PC 可以很好地处理它,为实验和工作流程优化提供无限的可能性。如果您喜欢使…

华为ensp--BGP路由反射器

学习新思想、争做新青年&#xff0c;今天学习的是BGP路由反射器。 实验目的 理解BGP路由反射器的应用场景 理解BGP路由反射器的工作原理 掌握BGP路由反射器的基本配置方法 实验内容 本实验网络包含了两个AS&#xff0c;两个Cluster。R1、R2、R3属于Cluster 1&#xff0c…

使用idea创建JDK8的SpringBoot项目

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 使用idea创建JDK8的SpringBoot项目 前言我们经常在创建新的springboot项目&#xff0c;默认使用的是spring.io进行创建&#xff0c;但是它总是只会提供高版本的创建方式&…

初学stm32 --- 定时器中断

目录 时钟选择&#xff1a; 内部时钟选择​编辑 时钟计算方法&#xff1a; 计数器模式 向下计数模式&#xff08;时钟分频因子1&#xff0c;ARR36&#xff09; 向上计数模式&#xff08;时钟分频因子1&#xff0c;ARR36&#xff09; 中央对齐计数模式&#xff08;时钟分频因…

windows下安装配置anaconda及常用的conda命令

Anaconda极大的简化了Python环境和库的管理&#xff0c;其最大的作用就是可以创建、管理多个不同python版本的虚拟环境&#xff0c;起到不同环境相互隔离、互不干扰、避免环境冲突的目的。如果使用本地Python安装多个包&#xff0c;经常会遇到包冲突&#xff0c;导致整个python…

安装CPU版的torch(清华源)

1、安装指令&#xff1a; pip3 install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple2、验证torch是否安装成功 // 使用python验证 import torch print(torch.__version__)能正常打印版本即表示安装成功&#xff0c;如下图

ASP.NET Core Web API 控制器

文章目录 一、基类&#xff1a;ControllerBase二、API 控制器类属性三、使用 Get() 方法提供天气预报结果 在深入探讨如何编写自己的 PizzaController 类之前&#xff0c;让我们先看一下 WeatherController 示例中的代码&#xff0c;了解它的工作原理。 在本单元中&#xff0c…

【蓝桥杯——物联网设计与开发】基础模块8 - RTC

目录 一、RTC &#xff08;1&#xff09;资源介绍 &#x1f505;简介 &#x1f505;时钟与分频&#xff08;十分重要‼️&#xff09; &#xff08;2&#xff09;STM32CubeMX 软件配置 &#xff08;3&#xff09;代码编写 &#xff08;4&#xff09;实验现象 二、RTC接口…

k8s dashboard可视化操作界面的安装

一、官方安装方法 根据官网的安装配置可以选择如下安装&#xff1a; kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml 二、添加阿里云加速进行安装 #修改recommended.yaml拉取镜像的链接 vim recommended.yam…

【目标跟踪综述及关键技术】

1.多目标跟踪任务介绍 定义 多目标跟踪旨在将视频序列中感兴趣的目标检测出来&#xff0c;并赋予每个目标单独的编号&#xff0c;在整个序列中形成目标的轨迹。 分类 online&#xff1a;算法在推理目标身份过程中&#xff0c;只能看见当前帧以及之前的帧&#xff08;关联&a…

webrtc音频模块(三) windows Core Audio API及声音的播放

在前面介绍了ADM(Audio Device Module)&#xff0c;它用于抽象音频设备管理和音频数据采集/播放接口。windows的实现是AudioDeviceWinowCode&#xff0c;它封装了Core Audio APIs实现了对音频设备的操作。 Core Audio APIs windows提供了多种音频操作API&#xff0c;比如最常…

在linux系统的docker中安装GitLab

一、安装GitLab&#xff1a; 在安装了docker之后就是下载安装GitLab了&#xff0c;在linux系统中输入命令&#xff1a;docker search gitlab就可以看到很多项目&#xff0c;一般安装第一个&#xff0c;它是英文版的&#xff0c;如果英文不好可以安装twang2218/gitlab-ce-zh。 …