Qt Quick 3D - Particles 3D 测试平台示例

演示如何使用 Qt Quick 3D Particles3D 模块。

本示例演示了不同的方法来使用 QtQuick3D.Particles3D 模块功能。Particles 测试平台包含一系列示例,一些侧重于特定功能,一些则结合更多功能以实现所需的视觉。

常见功能

测试平台中的示例共享一些常见功能。要退出示例返回启动屏幕,请按左上角的返回箭头。

每个示例的右下角都有一个图标,打开日志视图。从该视图,您可以查看有关粒子的不同调试数据。每个 ParticleSystem3D 都有其自己的行,显示其 ParticleSystem3DLogging 数据。

大多数示例的右上角都有一个设置视图,可以通过点击其图标显示或隐藏。这些设置有助于展示单个 API 功能以及粒子系统的动态行为。

下雪示例

让我们通过查看下雪示例来了解 Particles3D 的基础知识。

首先,使用以下语句导入 QtQuick3D.Particles3D 模块:

import QtQuick3D.Particles3D

ParticleSystem3D 是粒子系统的根,它处理系统时序并组合所有其他相关元素,如粒子、发射器和影响器。

ParticleSystem3D {
    id: psystem

    // Start so that the snowing is in full steam
    startTime: 15000

然后我们创建一个 SpriteParticle3D,它是一个视觉 2D 纹理粒子。如果我们需要 3D 模型粒子,我们还可以使用 ModelParticle3D。使用 maxAmount 来定义粒子的数量很重要,这样就可以分配最佳缓冲区大小。我们的雪花是白色的,具有不同的不透明度,并且以 1000ms 的速度淡入淡出。

SpriteParticle3D {
    id: snowParticle
    sprite: Texture {
        source: "images/snowflake.png"
    }
    maxAmount: 1500 * sliderIntensity.sliderValue
    color: "#ffffff"
    colorVariation: Qt.vector4d(0.0, 0.0, 0.0, 0.5);
    fadeInDuration: 1000
    fadeOutDuration: 1000
}

接下来,我们需要 ParticleEmitter3D 来发射上述 snowParticle 粒子。shape 属性定义了发射区域。在这里,我们将雪花定义具有不同的旋转和大小。使用 velocity 属性,您可以定义发射粒子的初始速度方向。每个雪花粒子存在 15 秒,发射率由设置滑块控制。

ParticleEmitter3D {
    id: emitter
    particle: snowParticle
    position: Qt.vector3d(0, 1000, -350)
    depthBias: -100
    scale: Qt.vector3d(15.0, 0.0, 15.0)
    shape: ParticleShape3D {
        type: ParticleShape3D.Sphere
    }
    particleRotationVariation: Qt.vector3d(180, 180, 180)
    particleRotationVelocityVariation: Qt.vector3d(50, 50, 50);
    particleScale: 2.0
    particleScaleVariation: 0.5;
    velocity: VectorDirection3D {
        direction: Qt.vector3d(0, sliderVelocityY.sliderValue, 0)
        directionVariation: Qt.vector3d(0, sliderVelocityY.sliderValue * 0.4, 0)
    }
    emitRate: sliderEmitRate.sliderValue * sliderIntensity.sliderValue
    lifeSpan: 15000
}

通常还会使用一些影响因子来使粒子运动更加有趣。在这个下雪示例中,我们使用Wander3D来使雪花沿着波浪形曲线飞行,以及使用PointRotator3D来模拟有风的天气。

Wander3D {
    enabled: checkBoxWanderEnabled.checked
    globalAmount: Qt.vector3d(sliderWanderGlobalAmount.sliderValue, 0, sliderWanderGlobalAmount.sliderValue)
    globalPace: Qt.vector3d(sliderWanderGlobalPace.sliderValue, 0, sliderWanderGlobalPace.sliderValue)
    uniqueAmount: Qt.vector3d(sliderWanderUniqueAmount.sliderValue, 0, sliderWanderUniqueAmount.sliderValue)
    uniquePace: Qt.vector3d(sliderWanderUniquePace.sliderValue, 0, sliderWanderUniquePace.sliderValue)
    uniqueAmountVariation: sliderWanderUniqueAmountVariation.sliderValue
    uniquePaceVariation: sliderWanderUniquePaceVariation.sliderValue
}
PointRotator3D {
    enabled: checkBoxRotatorEnabled.checked
    pivotPoint: Qt.vector3d(0, 0, -350)
    direction: Qt.vector3d(0, 1, 0)
    magnitude: sliderRotatorMagnitude.sliderValue
}

文件

图片

© 2024 Qt 公司有限。本文件中包含的文档捐献是各自所有者的版权。本文件提供的文档是根据由自由软件基金会发布的GNU 自由文档许可证版本 1.3的条款许可。Qt 及其相关标志是芬兰的 Qt 公司以及全球其他国家和地区的商标。所有其他商标均为其各自所有者的财产。