如何在 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

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