当前位置: 首页 > news >正文

Three.js 代码云效果 | 三维可视化 / AI 提示词

Three.js 代码云效果 | 三维可视化 / AI 提示词

📋 AI 提示词

使用 Three.js 的 ShaderMaterial 创建代码云效果,通过多个代码纹理的随机切换和下落动画,实现代码雨的视觉效果。

🖼️ 效果预览


🎮 案例演示

立即体验


效果拆解

效果实现方式
代码纹理加载多个代码图片作为纹理
随机切换在着色器中根据随机值选择不同纹理
下落动画在渲染循环中更新代码块位置
相机跟随代码块始终面向相机
循环效果代码块落到底部后重新回到顶部
随机更新定期更新随机值改变纹理选择

核心技术点

1. 着色器材质创建

functioninitMaterial(){letloader=newTHREE.TextureLoader()returnnewTHREE.ShaderMaterial({uniforms:{texture1:{value:loader.load(FILE_HOST+'application/codeCloud/1.png')},texture2:{value:loader.load(FILE_HOST+'application/codeCloud/2.png')},texture3:{value:loader.load(FILE_HOST+'application/codeCloud/3.png')},texture4:{value:loader.load(FILE_HOST+'/threeExamples/application/codeCloud/4.png')},texture5:{value:loader.load(FILE_HOST+'/threeExamples/application/codeCloud/5.png')},texture6:{value:loader.load(FILE_HOST+'/threeExamples/application/codeCloud/6.png')},texture7:{value:loader.load(FILE_HOST+'/threeExamples/application/codeCloud/7.png')},texture8:{value:loader.load(FILE_HOST+'/threeExamples/application/codeCloud/8.png')},texture9:{value:loader.load(FILE_HOST+'/threeExamples/application/codeCloud/9.png')},random:{value:Math.random()}},vertexShader:`varying vec2 vUv; void main() { vUv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); }`,fragmentShader:`varying vec2 vUv; uniform sampler2D texture1; uniform sampler2D texture2; uniform sampler2D texture3; uniform sampler2D texture4; uniform sampler2D texture5; uniform sampler2D texture6; uniform sampler2D texture7; uniform sampler2D texture8; uniform sampler2D texture9; uniform float random; void main() { float selfRandom = vUv.y - fract(vUv.y); float k = abs(sin(selfRandom * random))*10.0; if(k < 1.0) { gl_FragColor = texture2D( texture1, vec2(fract(vUv.x), fract(vUv.y))); } else if(k < 2.0) { gl_FragColor = texture2D( texture2, vec2(fract(vUv.x), fract(vUv.y))); } else if(k < 3.0) { gl_FragColor = texture2D( texture3, vec2(fract(vUv.x), fract(vUv.y))); } else if(k < 4.0) { gl_FragColor = texture2D( texture4, vec2(fract(vUv.x), fract(vUv.y))); } else if(k < 5.0) { gl_FragColor = texture2D( texture5, vec2(fract(vUv.x), fract(vUv.y))); } else if(k < 6.0) { gl_FragColor = texture2D( texture6, vec2(fract(vUv.x), fract(vUv.y))); } else if(k < 7.0) { gl_FragColor = texture2D( texture7, vec2(fract(vUv.x), fract(vUv.y))); } else if(k < 8.0) { gl_FragColor = texture2D( texture8, vec2(fract(vUv.x), fract(vUv.y))); } else { gl_FragColor = texture2D( texture9, vec2(fract(vUv.x), fract(vUv.y))); } }`,depthWrite:false,transparent:true});}

2. 代码云创建

cloud=newTHREE.Group()scene.add(cloud)shader_material=initMaterial()letwidth=128,height=128for(vari=0;i<1000;i++){varpos=newTHREE.Vector3(Math.random()*range-range/2,Math.random()*range-range/2,Math.random()*range-range/2)pos.vX=((Math.random()-0.5)/3)/10pos.vY=(0.05+Math.random()*0.1)/5letgeometry=newTHREE.PlaneGeometry(4,4);lets=Math.floor(Math.random()*1000)+1geometry.attributes.uv.array=geometry.attributes.uv.array.map(e=>e+=s)varplane=newTHREE.Mesh(geometry,shader_material);plane.position.copy(pos)plane.userData.pos=pos cloud.add(plane)}

3. 随机值更新

setInterval(()=>{if(cloud){cloud.children.map(plane=>{plane.material.uniforms.random.value=Math.random()})}},100)

4. 动画更新

functionsnowanimate(){if(cloud){cloud.children.map(plane=>{plane.rotation.y=camera.rotation.yletpos=plane.userData.pos plane.position.y+=pos.vYif(plane.position.y>=range/2)plane.position.y=-range/2})}}

调试技巧

  1. 代码块数量:调整循环次数控制代码块密度
  2. 下落速度:修改vY的值调整下落速度
  3. 纹理切换:调整random的更新频率改变纹理切换速度
  4. 代码块大小:调整PlaneGeometry的尺寸改变代码块大小

扩展思路

  1. 颜色变化:为不同代码块添加不同的颜色
  2. 交互效果:鼠标悬停高亮显示代码块
  3. 音频响应:根据音频节奏改变下落速度
  4. 3D效果:添加旋转和透视效果
  5. 代码高亮:实现语法高亮效果
  6. 搜索功能:添加搜索特定代码的功能
http://www.jsqmd.com/news/748227/

相关文章:

  • MoBind框架:IMU与视频数据的跨模态精准对齐技术
  • 【精通Postman接口测试】02-集合变量|环境变量|全局变量,批量运行原来这么简单(附图文+CLI实战)
  • v音频转换成文字在线怎么操作?2026年5款在线音频转文字工具实测方法
  • 2026西南墙绘浮雕服务标杆名录:会有时文化/别墅家装壁画/博物馆展馆壁画/商业墙绘彩绘壁画/墙体彩绘公司/墙体绘画墙/选择指南 - 优质品牌商家
  • 三生原理文章被AtomGit‌开源社区收录的意义探析?
  • 免费开源:用League Director制作专业级《英雄联盟》高光视频的完整指南
  • 2026TPO片材挤出机专业推荐名录:TPO造粒机/TPU片材挤出机/低烟无卤电缆料造粒机/水环造粒机/硅烷交联电缆料造粒机/选择指南 - 优质品牌商家
  • 从零开始通过 Taotoken 控制台完成注册获取密钥与首次调用的全过程
  • 外包第一天就“看顺眼”组长,这事比需求变更还危险
  • 录音实时转文字软件有哪些?2026年这5款软件转写能力对比排行
  • FLM与FMLM:连续去噪技术在语言建模中的突破
  • 仿照Muduo的高并发服务器:EventLoop模块及与TimeWheel模块联调
  • 基于Roslyn的C#代码库智能体导航地图生成器设计与实现
  • 内存增强语言模型:TRIBL2与IGTree架构对比与实践
  • 强化学习中推理长度的动态优化策略与实践
  • 终极指南:用RPFM轻松打造你的《全面战争》梦想模组
  • 2026.05.03
  • 告别连接难题:手把手教你用wpa_supplicant和iw工具配置SSV6x5x WiFi的Station模式
  • AI文本人性化:从技术原理到本地部署的完整实践指南
  • Cursor智能体开发:令牌与定价
  • 基于Next.js与Zustand的AI对话应用框架:lobe-chat架构解析与部署指南
  • AutoSar新手避坑:用Vector工具链配置1字节NV Block的完整流程(附Lauterbach调试实录)
  • 大语言模型文本检测:DMAP技术原理与应用
  • 文化与文明是两回事!弄不懂这一点,再努力也是“庸人自扰”
  • 3分钟彻底掌控Windows Defender:开源工具Defender Control深度解析
  • 基于AI代理的Discord流媒体机器人:架构、部署与实战
  • 旧版本 Nacos 客户端连接新版本服务端报错版本不匹配怎么解决
  • 2026届必备的五大AI辅助写作网站实际效果
  • Degrees of Lewdity中文美化整合包:一键打造你的专属游戏体验
  • AI代码生成评估新标准:NL2Repo-Bench详解