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

Qt Quick 粒子系统(十一):行为影响器——游走、湍流与年龄

目录

    • 一、粒子的行为模式
    • 二、开发环境与版本说明
    • 三、原理分析:三种行为影响器
      • 3.1 三种影响器对比
      • 3.2 Wander:随机游走
      • 3.3 Turbulence:湍流
      • 3.4 Age:年龄控制
    • 四、代码实现
      • 4.1 Affector_Wander.qml:随机游走
      • 4.2 Affector_Turbulence.qml:湍流
      • 4.3 Affector_Age.qml:年龄控制
    • 五、运行效果
    • 六、适用边界与限制条件
    • 七、总结

一、粒子的行为模式

上一篇讲了三种物理影响器——重力、摩擦、吸引,它们模拟经典力学的力场效果。但粒子的行为不仅限于物理力:雪花需要左右飘动(随机游走),火焰需要剧烈扰动(湍流),某些粒子需要提前消亡(年龄控制)。

本文讲解三种行为影响器:Wander(随机游走)、Turbulence(湍流)、Age(年龄控制)。它们控制的是粒子"怎么动、什么时候死"。


二、开发环境与版本说明

本文所有代码基于以下环境验证(验证日期:2026-06-17):

  • Qt 版本:6.8.2
  • 编译器:MinGW 64-bit
  • 操作系统:Windows 11
  • 构建工具:CMake 3.29

三、原理分析:三种行为影响器

3.1 三种影响器对比

影响器作用核心属性典型场景
Wander随机游走xVarianceyVariancepace布朗运动、雪花飘动
Turbulence湍流扰动strength(扰动强度)、noiseSource(噪声图)火焰、烟雾、水流
Age年龄控制lifeLeft(剩余生命)、advancePosition加速消亡、冻结效果

3.2 Wander:随机游走

Wander 对粒子施加随机的位置偏移,模拟布朗运动。三个核心属性:

  • xVariance:x 方向的最大随机偏移量
  • yVariance:y 方向的最大随机偏移量
  • pace:每秒最大属性变化量(控制游走速度)

Wander 的数学模型是:每帧在[-xVariance, +xVariance][-yVariance, +yVariance]范围内随机选择目标位置,然后以pace像素/秒的速度向目标移动。xVariance/yVariance控制游走范围,pace控制游走频率。

3.3 Turbulence:湍流

Turbulence 使用噪声图(如 Perlin 噪声)生成流体力,对粒子施加复杂的扰动。两个核心属性:

  • strength:扰动强度,力的大小与 strength 成正比
  • noiseSource:噪声图 URL,不提供时使用默认噪声图

Turbulence 需要固定尺寸——0×0 的 Turbulence 不会影响任何粒子。噪声图会被缩放到 Turbulence 的尺寸,使用 curl(旋度)生成力向量。

3.4 Age:年龄控制

Age 修改粒子的"年龄",让粒子跳到生命周期的指定位置。两个核心属性:

  • lifeLeft:设置粒子的剩余生命(毫秒)。粒子会跳到"生命还剩 lifeLeft 毫秒"的状态
  • advancePosition:是否同时推进位置/速度/加速度

advancePosition的区别

  • true(默认):位置、速度、加速度都会推进到对应时间点的状态——粒子会"瞬移"到新位置
  • false:只推进外观属性(如透明度、大小),位置不变——粒子在原地"老化"

Age 也被称为"Kill 影响器"——默认参数(lifeLeft: 0)会立即杀死所有受影响的粒子。


四、代码实现

4.1 Affector_Wander.qml:随机游走

Emitter { anchors.centerIn: parent width: 1; height: 1 emitRate: 60 lifeSpan: 10000 size: 10 velocity: PointDirection { x: 0; y: 0 xVariation: 50 yVariation: 50 } } Wander { system: particleSystem xVariance: 200 yVariance: 200 pace: 200 }

xVariance: 200, yVariance: 200:粒子在 ±200 像素范围内随机游走。设为 0 时该方向不受影响。

pace: 200:每秒最大变化 200 像素。pace 越大,粒子"抖动"越快;pace 越小,粒子缓慢漂移。

Emitter 的初始速度几乎为 0(x: 0, y: 0),粒子主要靠 Wander 运动。lifeSpan: 10000(10 秒)让粒子有足够时间展示游走行为。

4.2 Affector_Turbulence.qml:湍流

Emitter { anchors.left: parent.left anchors.verticalCenter: parent.verticalCenter width: 1; height: 1 emitRate: 100 lifeSpan: 10000 size: 16 velocity: AngleDirection { angle: 0 angleVariation: 15 magnitude: 250 magnitudeVariation: 100 } } Turbulence { system: particleSystem anchors.centerIn: parent width: 256 height: 256 strength: 300 noiseSource: "qrc:/images/perlin_noise.png" }

strength: 300:扰动强度。strength 越大,粒子轨迹越混乱。示例中支持切换 100-2000 的不同强度。

noiseSource:指向一张 Perlin 噪声图。噪声图的质量直接影响湍流效果——平滑的黑白噪声图效果最好。不提供时使用默认噪声图。

作用区域:Turbulence 只在 256×256 的矩形区域内生效。粒子进入区域后受湍流扰动,离开区域后恢复原有运动。代码中用半透明蓝色边框可视化了区域范围。

4.3 Affector_Age.qml:年龄控制

Emitter { anchors.left: parent.left anchors.verticalCenter: parent.verticalCenter width: 1; height: 1 emitRate: 80 lifeSpan: 6000 size: 12 velocity: PointDirection { x: 120 xVariation: 30 } } Age { system: particleSystem x: parent.width / 2 - 100 width: 20 height: parent.height lifeLeft: 500 advancePosition: false }

lifeLeft: 500:粒子穿过 Age 区域后,剩余生命被设为 500ms。原本还有 6 秒寿命的粒子,穿过区域后只剩 0.5 秒。

advancePosition: false:只推进外观属性(透明度、大小等),位置不变。粒子在原地快速"老化"——如果设为 true,粒子会"瞬移"到 0.5 秒后的位置。

视觉效果:粒子从左侧向右发射,穿过页面中央的红色垂直区域后,剩余生命骤减,在区域右侧快速消亡。代码中用半透明红色边框可视化了区域范围。


五、运行效果

Affector_Wander.qml:紫色星形粒子从中心缓慢扩散,在空间中大幅随机游走,形成布朗运动效果。

Affector_Turbulence.qml:蓝色星形粒子从左侧向右发射,穿过页面中央的蓝色区域时受强烈湍流扰动,轨迹变得混乱。可通过按钮切换不同强度。

Affector_Age.qml:红色星形粒子从左侧向右发射,穿过页面中央的红色区域后,生命周期被加速消耗,在区域右侧快速消亡。


六、适用边界与限制条件

  • Wander 的 xVariance/yVariance 设为 0 时该方向不受影响:只设 xVariance 不设 yVariance,粒子只在水平方向游走
  • Turbulence 需要固定尺寸:0×0 的 Turbulence 不会影响任何粒子,必须设 width 和 height
  • Turbulence 的噪声图质量影响效果:平滑的黑白噪声图(如 Perlin 噪声)效果最好,粗糙的噪声图会产生不自然的扰动
  • Age 的 lifeLeft 为 0 时立即杀死粒子:这是默认行为,也称为"Kill 影响器"
  • Age 的 advancePosition 影响很大:true 时粒子会瞬移,false 时粒子在原地老化——视觉效果完全不同

七、总结

三种行为影响器对应三种粒子行为模式:Wander 是随机游走(雪花飘动),Turbulence 是湍流扰动(火焰、烟雾),Age 是年龄控制(加速消亡)。选型依据:漂浮用 Wander,扰动用 Turbulence,消亡控制用 Age。

下一篇讲解尾迹发射器——TrailEmitter 如何让运动粒子留下尾迹。


资源下载:qml_particlesystem —— 包含完整的、可运行的代码

系列目录

  • 上一篇:Qt Quick 粒子系统(十):物理影响器——重力、摩擦与吸引
  • 本文:Qt Quick 粒子系统(十一):行为影响器——游走、湍流与年龄
  • 下一篇:Qt Quick 粒子系统(十二):尾迹发射器
http://www.cnnetsun.cn/news/2963474.html

相关文章:

  • 2026 年大模型求职难?看看码士集团面试突击班都讲了啥
  • Burp Suite 2024.7.3专业版实测:拦截优化与性能提升深度解析
  • 仿 Boots 大规模钓鱼攻击的技术机理与防御研究
  • 24AA024H/24LC024H EEPROM应用指南:低功耗设计、I2C驱动与数据可靠性
  • Gemini 3 Flash动态推理与视频理解工程实践指南
  • ONNX模型生产部署:封装、服务与监控全链路实践
  • TC1027四路比较器在嵌入式低功耗系统中的电源监控实战
  • AI驱动数字孪生的实时闭环:从建模到产线落地的7个关键步骤
  • 光盘救急工具:跳过加密限制、提取划痕盘数据、找回隐藏文件
  • JMeter压力测试全链路实战:从环境搭建到瓶颈定位
  • DeepSeek为何选择华为昇腾芯片?MoE架构与训推分离的硬核解析
  • 从CVE-2022-23366漏洞修复实战,详解SQL注入防御全链路策略
  • AI测试简历实战:零项目经验如何包装出高价值经历
  • LaneNet车道线检测完整工程包:含Tusimple数据适配、双主干网络训练与C++/Python双实现推理
  • 从模型转接到基础设施:2026企业大模型API聚合平台选型深度剖析
  • Java并发编程原理精讲:CAS与Atomic原子操作详解
  • 终极OpenCore Legacy Patcher指南:让老旧Mac免费运行最新macOS的完整教程
  • Citra模拟器图形优化:从模糊到清晰的3DS游戏体验提升指南
  • MPC801指令缓存架构解析:两路组相联、LRU替换与锁定机制
  • Microchip 25AA256/25LC256 SPI EEPROM选型、硬件连接与软件驱动全解析
  • 终极指南:3种创新方法解决小爱音箱音乐服务DID配置难题
  • 如何快速掌握Adobe软件管理:完整开源工具使用指南
  • Microchip 24AA024H与24LC024H EEPROM选型指南:从电压、封装到实战应用
  • 2026 AI 学习平台评测:7 家机构对比 + 四类人群适配指南
  • 小红书2026.6.11推荐算法升级深度解析:语义质量评分、深度互动建模与AI内容检测的技术拆解
  • 高速ADC实战指南:从MCP37220/MCP37D20-200参数解读到系统设计避坑
  • 从物理引擎到数字孩生:构建奥运跳台滑雪比赛仿真系统
  • 25LC512 EEPROM选型、硬件设计与软件驱动实战指南
  • Effective C++ 条款53:不要轻忽编译器的警告
  • LLM与RNN混合模型在代码理解中的应用与优化