vue+threeJs 生成云状特效屏幕

article/2025/8/19 13:31:58

        嗨,我是小路。今天主要和大家分享的主题是“vue+threeJs 生成云状特效屏幕”。        

动态云状特效示例图

二、实例代码

<!--创建一个动态数字屏幕-->
<template><div class="pageBox"><div class="leftBox" ref="leftRef"></div></div></template>
<script setup>
import { onMounted, onUnmounted, reactive, ref } from 'vue';
import * as THREE from 'three';
// 引入轨道控制器扩展库OrbitControls.js
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
import { getRandomColor, createLight } from '../utils/commonThree';
const leftRef = ref();
// 定义相机输出画布的尺寸(单位:像素px)
let width = window.innerWidth; //宽度
let height = window.innerHeight; //高度
// 创建3D场景对象Scene
const scene = new THREE.Scene();
//设置背景色
scene.background = new THREE.Color(0x646d59);const camera = new THREE.PerspectiveCamera(75, width / height, 0.1, 1000);
//三角形缩放过大时,会形成多种三角形形成的背景图
camera.position.z = 30;// 创建渲染器对象
const renderer = new THREE.WebGLRenderer();let tubes = [];
let material;
const createTube = () => {const geometry = new THREE.PlaneGeometry(100,100,100);material = new THREE.ShaderMaterial({transparent: true,uniforms: {time: { value: 0 },iTime:{value:0},},vertexShader: `varying vec2 vUv;void main() {vUv = uv;gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);}`,fragmentShader: `#define PI2 6.28318530718#define PI 3.1416uniform float iTime;uniform vec2 iResolution;varying vec2 vUv;float vorocloud(vec2 p){float f = 0.1;//输入坐标 p 进行周期性处理vec2 pp = cos(vec2(p.x * 14.0, (16.0 * p.y + cos(floor(p.x * 30.0)) + iTime * PI2)));//坐标 p 进行非线性扭曲p = cos(p * 12.1 + pp * 10.0 + 0.5 * cos(pp.x * 10.0));vec2 pts[4];pts[0] = vec2(0.5, 0.6);pts[1] = vec2(-0.4, 0.4);pts[2] = vec2(0.2, -0.7);pts[3] = vec2(-0.3, -0.4);float d = 1.0;for(int i = 0; i < 4; i++){pts[i].x += 0.03 * cos(float(i)) + p.x;pts[i].y += 0.03 * sin(float(i)) + p.y;d = min(d, distance(pts[i], pp));}f = 3.0 * pow(1.0 - 0.3 * d, 13.0);f = min(f, 1.0);return f;}void main() {vec2 UV = vUv;vec2 p = UV - vec2(0.1);vec4 col = vec4(0.0);col.g += 0.01;float v = vorocloud(p);//亮度v = 0.2 * floor(v * 5.0);// rgba 中的red green blue col.r += 0.3 * v;col.g += 0.6 * v;col.b += 0.5 * pow(v, 5.0);//生成屏幕的数字层数v = vorocloud(p * 1.0);//数字的亮度v = 0.1 * floor(v * 5.0);col.r += 0.3 * v;col.g += 0.2 * v;col.b += 0.1 * pow(v, 5.0);//透明度col.a = 1.0;gl_FragColor = col;}`,side: THREE.DoubleSide});const tube = new THREE.Mesh(geometry, material);return tube;
}onMounted(() => {initData()renderer.setSize(width, height); //设置three.js渲染区域的尺寸(像素px)//将innerHTML置空,避免append重复添加渲染leftRef.value.innerHTML = ''leftRef.value.append(renderer.domElement);})
const initData = () => {createLight(scene);for (let i = 1; i >= 0; i--) {const outSphere = createTube();tubes.push(outSphere);scene.add(outSphere);}render();
}
function render() {requestAnimationFrame(render);material.uniforms.iTime.value += 0.01;renderer.render(scene, camera);
}
onUnmounted(() => {//释放内存renderer.dispose();
})</script>
<style scoped lang="less">
.pageBox {width: 100%;height: 100vh;padding: 0;margin: 0;position: fixed;top: 0;left: 0;display: flex;justify-content: space-between;align-items: center;.rightBox {width: 100%;height: 100%;}
}
</style>

三、总结

       1、想生成动态变化,需要使用iTime。

        2、设置背景屏幕,不需要设置相机控制器

        3、gl_FragColor是像素的颜色。如何对屏幕颜色进行调整,可以参考代码中的注释。

成长是一个持续的过程,需要一步一个脚印!

都看到这里了,记得【点赞】+【关注】哟。

参考文章:

Three.js 实现云状特效

vue+threeJs 在开发中将部分常用的代码模块封装-CSDN博客


http://www.hkcw.cn/article/vSciTptHyP.shtml

相关文章

【穷举】数字方格

题目描述 如上图&#xff0c;有3个方格&#xff0c;每个方格里面都有一个整数a1&#xff0c;a2&#xff0c;a3。&#xff08;0 < a1, a2, a3 < n&#xff09; 而且a1 a2是2的倍数&#xff0c;a2 a3是3的倍数&#xff0c; a1 a2 a3是5的倍数。 你的任务是找到一组a1…

四大行浙江分行原行长相继落马 反腐风暴新高潮

5月27日下午,浙江钱塘江金融研修院官网“现任领导”一栏突然出现空白,原院长沈荣勤的信息消失。随后多家媒体报道称,工商银行浙江省分行原行长沈荣勤已被带走调查。这标志着继中行郭心刚、建行高强、农行冯建龙之后,第四位“四大行”浙江分行原一把手落马,这场席卷全省金融…

[嵌入式实验]实验一:点亮LED

一、实验目的 了解集成开发环境了解STM开发板硬件配置利用cubeMX软件运行程序点亮LED灯 二、实验环境 硬件&#xff1a;STM32开发板、CMSIS-DAP调试工具 软件&#xff1a;ARM的IDE&#xff1a;Keil C51 三、实验内容 1.实验方法 &#xff08;1&#xff09;连接设备 连接…

STM32 AD单通道与多通道实战指南

文章目录 AD单通道&#xff08;实验&#xff09;有关配置的库函数AD单通道部分主要代码 AD多通道实现多通道采集实现思路探讨单次转换非扫描模式实现AD多通道AD多通道部分代码 学习建议&#xff1a;推荐搭配 江协科技 AD单通道 AD多通道一起食用&#xff01;&#xff01;&#…

浅谈JMeter之常见问题Address already in use: connect

浅谈JMeter之常见问题Address already in use: connect 在JMeter高并发测试中出现“address already in use”错误&#xff0c;主要源于Windows系统的TCP端口资源耗尽及连接配置问题&#xff0c;在执行JMeter中查看结果树 原因分析 GET请求默认采用短连接&#xff08;Conne…

【Java orm框架对比】十四新增gaarason/database-all框架对比

本次更新内容如下 新增 gaarason/database-all框架对比一万条数据以内与其他框架保持一致数据量超过十万时存储与查询性能还需要优化 orm框架使用性能比较 测试方法拉取代码&#xff0c;配置数据库账号信息&#xff0c;直接启动&#xff0c;然后打开控制台页面通过页面点击测…

学习STC51单片机20(芯片为STC89C52RCRC)

每日一言 生活不会一帆风顺&#xff0c;但你的勇敢能让风浪变成风景。 串口助手的界面就等于是pc端的页面设置的是pc端的波特率等等参数 程序里面的是单片机的波特率等等参数 串口助手是 PC 端软件 串口助手&#xff08;如 STC-ISP&#xff09;是运行在 PC 上的工具&#x…

再见Notepad++,你好Notepad--

Notepad-- 是一款国产开源的轻量级、跨平台文本编辑器&#xff0c;支持 Window、Linux、macOS 以及国产 UOS、麒麟等操作系统。 除了具有常用编辑器的功能之外&#xff0c;Notepad-- 还内置了专业级的代码对比功能&#xff0c;支持文件、文件夹、二进制文件的比对&#xff0c;支…

台媒:台海军第六号浮船坞沉没 70年老船坞终退役

台海军于5月29日证实,第六号浮船坞在当天上午进行压浮载测试期间因进水沉没,事故没有造成人员伤亡。台海军司令部表示,目前已经成立相关工作组进行后续处置并调查事故原因。据报道,5月29日上午8点,台军正在进行第六号浮船坞的检修工作,并进行压浮载测试。测试期间,工作人…

男童走失获救追踪犬玛丽立功 警犬技术显神威

5月27日13时许,经过近42小时的持续搜救,重庆市公安局刑侦总队警犬追踪小组成功找到了走失的2岁男童。5月25日20时21分,綦江区公安局接到报警称石角镇下湾村一名2岁的男童兵兵(化名)走失。警方立即启动应急预案,组织民警和当地村民开展搜索和排查,并利用无人机技术缩小搜…

【数据库】关系查询处理和查询优化

关系数据库系统的查询处理 一、查询处理的步骤 关系数据库查询处理分成几个阶段&#xff1a; 查询分析 查询分析对语句进行扫描、词法分析和语法分析&#xff0c;从查询语句中识别语言符号&#xff0c;进行语法分析和语法检查。 查询检查 包括依据数据字典对合法查询语句进行…

母女频繁高空抛物邻居戴头盔 小区困扰多年

近日,广州市天河区棠德花苑小区一对家住九楼的母女因频繁高空抛物引发业主不满,有业主甚至戴头盔出门。5月29日记者走访发现,多栋居民楼外墙均印有“高空抛物,害人害己,注意公德,爱惜公物”的红色警示语。据此前报道,该小区庞先生反映这对母女常从高处扔玻璃瓶和砖头,给…

段某被判赔偿胖东来40万元 名誉侵权案宣判

2025年5月28日,许昌市魏都区人民法院公开审理了许昌市胖东来商贸集团有限公司与段某之间的名誉权纠纷案,并当庭宣判。法院判决段某在其个人抖音账号“两个小段(小)”上发布书面道歉信的视频,内容需经法院审核,且30日内不得删除。此外,段某还需赔偿许昌市胖东来商贸集团有…

数据治理是什么意思?数据治理平台有哪些?

目录 一、数据治理的概念 1. 数据治理的定义 2. 数据治理的目标 二、数据治理的实施流程 1. 规划阶段 2. 评估阶段 3. 执行阶段 4. 监控与评估阶段 三、常见的数据治理平台 1. FineDataLink 2. IBM InfoSphere Information Governance Catalog 四、总结 随着企业业…

胖东来起诉“红内裤”事件博主一审 当庭宣判待公布

胖东来因名誉权侵权起诉博主段某(网名“两个小段”)的案件有了新进展。5月29日,许昌市魏都区人民法院民一庭工作人员表示,此案于5月28日下午一审开庭并当庭宣判,具体审判结果将择期公布。此前,网红“两个小段”发布视频称自己从胖东来购买的红色内裤掉色,并且使用后出现…

唐雪芳被罢免 曾获评广西最美公务员 职务变动引关注

广西壮族自治区人民代表大会常务委员会5月29日发布公告,来宾市人大常委会决定罢免唐雪芳的自治区第十四届人民代表大会代表职务。根据《中华人民共和国全国人民代表大会和地方各级人民代表大会代表法》的相关规定,唐雪芳的代表资格终止。5月23日,来宾市五届人大常委会第三十…

哈马斯称诉求未获以方回应 停火提案引争议

5月29日,巴勒斯坦阿克萨电视台发布了哈马斯高级官员巴塞姆纳伊姆的声明。声明确认哈马斯收到了美方提出的加沙地带停火提案以及以色列对该提案的回应。哈马斯认为,以色列的回应本质上是在延续对加沙地带的占领,并继续实施杀戮和饥饿政策。以色列没有回应哈马斯的任何要求,特…

长春CCPC邀请赛

总体来说一般般吧&#xff0c;都是能写的都是写不是太难的题&#xff0c;G题很亏&#xff0c;非常简单的题最开始没看出来正确思路后边打一堆模拟错了好多发。 G、Platform Game 题目链接&#xff1a;Problem - G - Codeforces 题目很好懂&#xff0c;就是一个球只能往右下走&…

前端 jQuery 实现 贪吃蛇游戏

效果图 源代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>jQuery贪吃蛇游戏&l…

怒更一波免费声音克隆和AI配音功能

宝子们&#xff01; 最近咱软件TransDuck的免费声音克隆和AI配音功能被大家用爆啦&#xff01;感谢各位自来水疯狂安利&#xff01;&#xff01; DD这里也是收到好多用户提的宝贵建议&#xff01;所以&#xff0c;连夜肝了波更新&#xff01; 这次重点更新使用克隆音色进行A…