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

Three.js 花瓣雨教程

花瓣雨 ·Flower Rain· ▶ 在线运行案例

  • 案例合集:三维可视化功能案例(threehub.cn)
  • 开源仓库github地址:https://github.com/z2586300277/three-cesium-examples
  • 400个案例代码:网盘链接

你将学到什么

  • OrbitControls 相机轨道交互
  • requestAnimationFrame渲染循环与resize自适应

效果说明

本案例演示花瓣雨效果:基于 WebGL 实现「花瓣雨」可视化效果,附完整可运行源码;核心用到 OrbitControls。建议先打开文首在线案例查看动态画面,再对照下方源码逐步理解。

核心概念

  • OrbitControls轨道旋转缩放;开enableDamping时每帧需controls.update()

实现步骤

  • 搭建 Scene / Camera / Renderer 与 OrbitControls
  • rAF 循环中 update 并 render
  • 代码要点

    import * as THREE from 'three';

    import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';

    const box = document.getElementById('box');

    const scene = new THREE.Scene(); /**

    • 花瓣分组
    */ const petal = new THREE.Group();

    const width = box.clientWidth; const height = box.clientHeight; //窗口宽高比 const k = width / height; //三维场景的显示的上下范围 const s = 200; const camera = new THREE.OrthographicCamera(-sk, sk, s, -s, 1, 1000);

    const renderer = new THREE.WebGLRenderer();

    function create() { //设置相机位置 camera.position.set(0, 200, 500) camera.lookAt(scene.position)

    //设置渲染区域尺寸 renderer.setSize(width, height) //设置背景颜色

    //body元素中插入canvas对象 box.appendChild(renderer.domElement)

    // const axisHelper = new THREE.AxisHelper(1000); // scene.add(axisHelper)

    var flowerTexture1 = new THREE.TextureLoader().load(FILE_HOST + "examples/flowerAndHouse/img/flower1.png"); var flowerTexture2 = new THREE.TextureLoader().load(FILE_HOST + "examples/flowerAndHouse/img/flower2.png"); var flowerTexture3 = new THREE.TextureLoader().load(FILE_HOST + "examples/flowerAndHouse/img/flower3.png"); var flowerTexture4 = new THREE.TextureLoader().load(FILE_HOST + "examples/flowerAndHouse/img/flower4.png"); var flowerTexture5 = new THREE.TextureLoader().load(FILE_HOST + "examples/flowerAndHouse/img/flower5.png"); var imageList = [flowerTexture1, flowerTexture2, flowerTexture3, flowerTexture4, flowerTexture5];

    for (let i = 0; i < 400; i++) { var spriteMaterial = new THREE.SpriteMaterial({ map: imageList[Math.floor(Math.random() * imageList.length)],//设置精灵纹理贴图 }); var sprite = new THREE.Sprite(spriteMaterial); petal.add(sprite);

    sprite.scale.set(40, 50, 1); sprite.position.set(2000(Math.random() - 0.5), 500Math.random(), 2000 * (Math.random() - 0.5)) } scene.add(petal) }

    function render() { petal.children.forEach(sprite => { sprite.position.y -= 5; sprite.position.x += 0.5; if (sprite.position.y < - height / 2) { sprite.position.y = height / 2; } if (sprite.position.x > 1000) { sprite.position.x = -1000 } });

    renderer.render(scene, camera)

    requestAnimationFrame(render) }

    create() render()

    const controls = new OrbitControls(camera, renderer.domElement); controls.autoRotate = true;

    完整源码:GitHub

    小结

    • 本文提供花瓣雨完整 Three.js 源码与在线 Demo,建议先运行案例再改 uniform/参数做二次实验
    • 更多 Three.js 实战案例见 three-cesium-examples 合集 与 GitHub 开源仓库
http://www.cnnetsun.cn/news/3489020.html

相关文章:

  • AM62L CBASS防火墙配置详解:从硬件隔离到系统安全实践
  • YimMenu终极指南:3步打造GTA5最安全的游戏体验
  • Adobe-GenP 3.0终极指南:三步免费激活Photoshop等Adobe全家桶的完整教程
  • Windows系统清理终极指南:DriverStore Explorer帮你释放数十GB磁盘空间
  • WaveTools深度解析:3步解锁鸣潮高帧率与专业数据分析的终极方案
  • HFSS仿真在T型波导功分器微放电效应分析中的应用
  • Windows 11存储优化与图片管理高阶技巧
  • Adobe破解工具GenP 3.0:三步永久激活Photoshop等专业软件
  • MT7628/7688 UART2串口配置与优化指南
  • 开源图像查看器Tacent View:游戏开发者的纹理处理解决方案
  • 终极LRC歌词制作指南:5分钟学会专业滚动歌词制作
  • 【小白也能轻松玩转龙虾】虾壳云一键部署,新手跟着操作零安装压力(附最新安装包)
  • DFT笔记79
  • TI CSI-2协议引擎寄存器配置与VC FIFO优化实战指南
  • AI3D工作流应该包括哪些环节?用V2Fun从生成推进到可动资产
  • 变频器辅助电源设计:反激式拓扑与多路输出稳压技术
  • GPT Image 2动画生成技术解析与应用实践
  • Facebook SDK接入指南:从开发到优化的全流程解析
  • 3分钟掌握思源宋体CN:开源中文设计字体的完全指南
  • 自制电磁感应断线检测器:低成本精准定位电线断点
  • 【2018-06-02】有关TCP和UDP粘包和消息保护边界
  • 思源宋体TTF完全指南:7种字重免费开源字体全方位应用
  • 漫画翻译工具:翻页即译技术原理与实战应用指南
  • 多机器人协作中的任务分配:从理论到实践
  • Windows热键侦探:三分钟定位快捷键冲突的神器
  • 掌握vJoy虚拟摇杆:从零构建专业级游戏控制解决方案
  • KVarN: Variance-Normalized KV-Cache Quantization Mitigates Error Accumulation in Reasoning Tasks
  • go refresh-token需要存表校验吗?
  • 如何在5分钟内搭建终极自托管游戏串流系统:Sunshine完全指南
  • C语言变量详解:定义、存储类型与最佳实践