vue3中使用three.js记录
记录一下three.js配合vite+vue3的使用。
安装three.js
使用npm安装:
npm install --save three
开始使用
1.定义一个div
<template><div ref="threeContainer" class="w-full h-full"></div>
</template>
可以给这个div定义一个ref,之后会使用ref获取该页面的宽和高以及插入canvas,或者直接插入document.body。这里有一个前提,这个div需要被定义确定的宽和高,例如style="width:100vw;height:100vh"
2.定义script
引入threejs以及可能会用到的组件
import * as THREE from 'three';
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js';
import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js';
import { Water } from 'three/examples/jsm/objects/Water2.js';
import gsap from 'gsap';
定义一些常用的变量以及初始化方法
let scene: any, camera: any, renderer: any, controls: any, dracoLoader: any, gltfLoader: any, starsInstance: any;
onUnmounted(() => {// 退出时清理资源if (renderer) renderer.dispose();
});
const initThree = () => {// 初始化场景scene = new THREE.Scene();// 初始化相机camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);camera.position.set(-3.23, 2.98, 4.06);camera.updateProjectionMatrix();// 初始化渲染器renderer = new THREE.WebGLRenderer({// 设置抗锯齿antialias: true});renderer.setSize(window.innerWidth, window.innerHeight);// 渲染完成后插入bodydocument.body.appendChild(renderer.domElement);// 设置色调映射renderer.outputEncoding = THREE.sRGBEncoding;renderer.toneMapping = THREE.ACESFilmicToneMapping;renderer.toneMappingExposure = 0.5;renderer.shadowMap.enabled = true;renderer.physicallyCorrectLights = true;// 初始化控制器controls = new OrbitControls(camera, renderer.domElement);controls.target.set(-8, 2, 0);controls.enableDamping = true;// 初始化loader以及设置压缩模型的解压缩地址dracoLoader = new DRACOLoader();dracoLoader.setDecoderPath('./draco/');gltfLoader = new GLTFLoader();gltfLoader.setDRACOLoader(dracoLoader);// 加载环境纹理,天空鱼眼图片const rgbeLoader = new RGBELoader();rgbeLoader.load('./textures/sky.hdr', (texture) => {texture.mapping = THREE.EquirectangularReflectionMapping;scene.background = texture;scene.environment = texture;});// 加载模型gltfLoader.load('./model/scene.glb', (gltf: any) => {const model = gltf.scene;model.traverse((child: any) => {if (child.name === 'Plane') {child.visible = false;}if (child.isMesh) {child.castShadow = true;child.receiveShadow = true;}});scene.add(model);});// 设置灯光initLight();
};
const initLight = () => {// 添加平行光const light = new THREE.DirectionalLight(0xffffff, 1);light.position.set(0, 50, 0);scene.add(light);
};
const render = () => {requestAnimationFrame(render);renderer.render(scene, camera);controls.update();
};
initThree();
render();
// 监听鼠标事件
window.addEventListener('click',(e) => {if (isAnimate) return;isAnimate = true;index.value++;if (index.value > scenes.length - 1) {index.value = 0;restoreHeart();}scenes[index.value].callback();setTimeout(() => {isAnimate = false;}, 1000);},false
);
相关文章:
vue3中使用three.js记录
记录一下three.js配合vitevue3的使用。 安装three.js 使用npm安装: npm install --save three开始使用 1.定义一个div <template><div ref"threeContainer" class"w-full h-full"></div> </template>可以给这个di…...
MySQL——表的内外连接
目录 一.内连接 二.外连接 1.左外连接 2.右外连接 一.内连接 表的连接分为内连和外连 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。 语法: s…...
基于IPP-FFT的线性调频Z(Chirp-Z,CZT)的C++类库封装并导出为dll(固定接口支持更新)
上一篇分析了三种不同导出C++类方法的优缺点,同时也讲了如何基于IPP库将FFT函数封装为C++类库,并导出为支持更新的dll库供他人调用。 在此基础上,结合前面的CZT的原理及代码实现,可以很容易将CZT变换也封装为C++类库并导出为dll,关于CZT的原理和实现,如有问题请参考: …...
【C语言】指针
基本概念 在C语言中,指针是一种非常重要的数据类型,它用于存储变量的内存地址。指针提供了对内存中数据的直接访问,使得在C语言中可以进行灵活的内存操作和数据传递。以下是关于C语言指针的一些基本概念: 1. 指针的声明ÿ…...
PostgreSql 索引使用技巧
索引种类详情可参考《PostgreSql 索引》 一、适合创建索引的场景 经常与其他表进行连接的表,在连接字段上应该建索引。经常出现在 WHERE 子句中的字段,特别是大表的字段,应该建索引。经常出现在 ORDER BY 子句中的字段,应该建索…...
【华为数据之道学习笔记】6-7打造业务自助分析的关键能力
华为公司将自助分析作为一种公共能力,在企业层面进行了统一构建。一方面,面向不同的消费用户提供了差异性的能力和工具支撑;另一方面,引入了“租户”概念,不同类型的用户可以在一定范围内分析数据、共享数据结果。 1. …...
K8S从harbor中拉取镜像的规则imagePullPolicy
1、参数 配制参数为:imagePullPolicy: 可以选择的值有:Always,IfNotPresent,Never 2、参数结果 如果pod的镜像拉取策略为imagePullPolicy: Always:当harbor不能运行后,pod会一直从harbor上拉…...
LeetCode刷题--- 优美的排列
个人主页:元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 http://t.csdnimg.cn/6AbpV 数据结构与算法 http://t.cs…...
关于edge浏览器以及插件推荐【亲测好用】
一.edge浏览器介绍 Edge 浏览器是由微软公司开发的一款新一代网络浏览器。它最初于2015年发布,是微软Windows 10 操作系统的默认浏览器,后来还推出了适用于 Android 和 iOS 等移动设备的版本。Edge 浏览器采用了全新的浏览器内核,称为 Micros…...
关于“Python”的核心知识点整理大全43
目录 编辑 15.2.3 使2散点图并设置其样式 scatter_squares.py 15.2.4 使用 scatter()绘制一系列点 scatter_squares.py 15.2.5 自动计算数据 scatter_squares.py 15.2.6 删除数据点的轮廓 15.2.7 自定义颜色 15.2.8 使用颜色映射 scatter_squares.py 注意 15.2.9…...
Android Framework一些问题思考
一,zygote通信为什么用socket,而不是binder? 1,binder通信依赖用户空间进程Servicemanager,socket通信不依赖用户空间进程。zygote与servicemanager, surfaceflinger等都是通过各自init.rc文件被init进程解析加载,时…...
2024年安全员-C证证考试题库及安全员-C证试题解析
题库来源:安全生产模拟考试一点通公众号小程序 2024年安全员-C证证考试题库及安全员-C证试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大纲随机出的…...
推广主要指标及定义
推广主要指标以直通车为例解释,如图所示 1.展示量:当消费者搜索某个词,推广计划在天猫直通车展示位上被买家看到的次数(去掉被消费者快进划过、主图未完金展现等情况产生的曝光); 2.点击量:消费者看到广告…...
【Proteus仿真】【Arduino单片机】水质监测报警系统设计
文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用按键、LED、蜂鸣器、LCD1602、ADC、PH传感器、浑浊度传感器、DS18B20温度传感器、继电器模块等。 主要功能: 系统运行后…...
随机问卷调查数据的处理(uniapp)
需求:问卷调查 1.返回的数据中包含单选、多选、多项文本框、单文本框、图片上传 2.需要对必填的选项进行校验 3.非必填的多项文本框内容 如果不填写 不提交 表单数据格式 res{"code": 0,"msg": null,"data": [{"executeDay&…...
开源分布式搜索引擎ElasticSearch结合内网穿透远程连接
文章目录 前言1. Windows 安装 Cpolar2. 创建Elasticsearch公网连接地址3. 远程连接Elasticsearch4. 设置固定二级子域名 前言 简单几步,结合Cpolar 内网穿透工具实现Java 远程连接操作本地分布式搜索和数据分析引擎Elasticsearch。 Cpolar内网穿透提供了更高的安全性和隐私保…...
Leetcode2928. 给小朋友们分糖果 I
Every day a Leetcode 题目来源:2928. 给小朋友们分糖果 I 解法1:暴力 枚举 3 位小朋友的糖果数,范围为 [0, limit],分别记为 i、j、k。 当满足 i j k n 时,答案 1。 代码: /** lc appleetcode.c…...
go-zero开发入门之网关往rpc服务传递数据2
go-zero 的网关服务实际是个 go-zero 的 API 服务,也就是一个 http 服务,或者说 rest 服务。http 转 grpc 使用了开源的 grpcurl 库,当网关需要往 rpc 服务传递额外的数据,比如鉴权数据的时候,通过 http 的 header 进行…...
Cron介绍,以及常见的cron表达式
目录 一.cron介绍 1.什么是Cron? 2.Cron语法 时间字段的取值范围如下: 时间字段支持以下特殊字符: 下面是一些示例: 3.虚拟机安装cron(centos7展示) 二.常见的cron表达式 一.cron介绍 1.什么是Cron? Cron是一个…...
智能优化算法应用:基于协作搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于协作搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于协作搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.协作搜索算法4.实验参数设定5.算法结果6.…...
手把手教你用QEMU+GDB调试RISC-V中断:以蜂鸟E200 ECLIC为例
从零构建RISC-V中断调试实战:基于QEMU与蜂鸟E200 ECLIC的深度解析 第一次在QEMU中成功捕获到中断向量跳转时,GDB窗口里那个闪烁的mtvec地址让我兴奋得差点打翻咖啡——这比看任何理论文档都直观十倍。作为从ARM Cortex-M转型RISC-V的嵌入式开发者&#x…...
FastAPI负载测试:持续集成的完整指南
FastAPI负载测试:持续集成的完整指南 【免费下载链接】fastapi FastAPI framework, high performance, easy to learn, fast to code, ready for production 项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi FastAPI作为高性能、易学习的现代Pyth…...
ESP32+LVGL实战:手把手教你搞定ST7789屏幕镜像显示(附完整代码)
ESP32LVGL实战:从寄存器到工程化配置,彻底解决ST7789屏幕镜像显示问题 当你用ESP32驱动ST7789屏幕时,是否遇到过图像上下左右颠倒的困扰?这个问题看似简单,但网上的零散教程往往只告诉你改某个寄存器值,却忽…...
化学信息学避坑指南:RDKit分子数据解析的7个常见错误与解决方案
RDKit分子数据处理实战:7个高频错误排查与性能优化指南 在药物研发和材料科学领域,RDKit作为化学信息学的瑞士军刀,每天处理着数以百万计的分子结构数据。但当你在凌晨三点调试代码时,一个不起眼的PDB文件编码错误可能让整个分析流…...
AI时代的程序员应该如何就业突击找工作?编程语言该如何选择才不会被时代所淘汰?
AI时代的程序员应该如何就业突击找工作?编程语言该如何选择才不会被时代所淘汰? AI时代程序员就业突击与编程语言选择指南 一、就业突击策略 核心能力强化 算法与数据结构:掌握基础算法(排序/搜索)和高级结构&#x…...
告别指标混乱:衡石科技指标管理平台的AI自治之路
指标混乱的根源在数字化时代,企业决策依赖的指标体系正面临前所未有的混乱:63%的企业存在指标定义不统一问题,58%的团队因数据口径差异导致决策冲突。这种"指标地狱"不仅消耗大量人力进行数据对齐,更直接导致战略执行偏移。某制造企业的案例极具代表性:其生产部门与财…...
生信分析必备:用TBtools打造高颜值热图的5个隐藏技巧
生信分析必备:用TBtools打造高颜值热图的5个隐藏技巧 在生物信息学分析中,热图(Heatmap)是最常用的数据可视化工具之一。一张精心设计的热图不仅能清晰展示基因表达、代谢物含量或其他生物数据的模式,还能让研究成果在…...
模型微调加速:OpenClaw对接nanobot的LoRA训练
模型微调加速:OpenClaw对接nanobot的LoRA训练 1. 为什么选择OpenClawnanobot进行模型微调 去年我在尝试用Qwen3-4B模型处理专业领域任务时,发现直接使用基础模型的效果总差强人意。模型要么对专业术语理解不到位,要么生成的回答缺乏领域特性…...
实战指南:如何为你的应用选择最优Cache替换算法(附性能对比)
实战指南:如何为你的应用选择最优Cache替换算法(附性能对比) 在构建高性能应用时,缓存系统的设计往往是决定整体性能的关键因素之一。想象一下,一个电商网站在大促期间,每秒需要处理数十万次商品详情查询&a…...
告别黑苹果配置噩梦:5大核心优势让开源工具OpCore-Simplify成为新手救星
告别黑苹果配置噩梦:5大核心优势让开源工具OpCore-Simplify成为新手救星 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 黑苹果配置一直是…...
