news 2026/11/1 6:58:19

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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随机游走xVariance、yVariance、pace布朗运动、雪花飘动
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 粒子系统(十二):尾迹发射器
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/21 22:36:10

2026 年大模型求职难?看看码士集团面试突击班都讲了啥

2026 求职寒冬下的破局点:从算法真题到架构设计的深度复盘 2026 年的技术招聘市场,风向变得有些微妙。对于大数据开发、前端、测试以及传统的 Java 后端工程师来说,单纯掌握业务 CRUD 代码已经很难在面试中脱颖而出。尤其是当"AI 大模型…

作者头像 李华
网站建设 2026/10/26 17:44:25

Burp Suite 2024.7.3专业版实测:拦截优化与性能提升深度解析

1. 项目概述:一次深度工具评测的缘起作为一名在应用安全领域摸爬滚打了十多年的老手,Burp Suite 一直是我工具箱里最趁手的那把“瑞士军刀”。从早期的社区版到后来的专业版,每一次版本迭代,我都会第一时间上手实测,看…

作者头像 李华
网站建设 2026/10/19 15:19:39

仿 Boots 大规模钓鱼攻击的技术机理与防御研究

摘要2026 年 6 月爆发的仿 Boots 药房钓鱼事件,以近 900 万英国购物者为目标,通过高仿真品牌页面、虚假返利调查与低成本支付诱骗,形成工业化数据窃取链路。本文以该事件为核心样本,系统剖析攻击的社会工程套路、技术架构与产业化…

作者头像 李华
网站建设 2026/10/29 17:11:02

24AA024H/24LC024H EEPROM应用指南:低功耗设计、I2C驱动与数据可靠性

1. 项目概述:为什么是24AA024H/24LC024H?在嵌入式开发里,存储配置参数、校准数据或者运行日志是家常便饭。直接用MCU内部的Flash不是不行,但擦写次数有限,频繁操作容易“折寿”,而且掉电数据就没了。这时候…

作者头像 李华
网站建设 2026/10/23 15:43:55

Gemini 3 Flash动态推理与视频理解工程实践指南

1. 项目概述:当“博士级思考”开始按流量计费我第一次在内部测试环境里跑通 Gemini 3 Flash 的完整视频理解 pipeline,是在一个周三下午三点。当时正处理一段 47 分钟的客户产品演示录像——不是抽帧、不是 OCR、不是调用三个不同 API 拼凑结果&#xff…

作者头像 李华
网站建设 2026/10/19 14:56:17

ONNX模型生产部署:封装、服务与监控全链路实践

1. 项目概述:这不是“跑通模型”,而是让模型在真实世界里活下来“From Notebook to Production: Running ML in the Real World (Part 4)”——这个标题本身就像一句行话暗号,老手一眼就懂:前面三篇已经蹚过了数据清洗、特征工程、…

作者头像 李华