mirror of https://github.com/qt/qtdoc.git
86 lines
2.2 KiB
QML
86 lines
2.2 KiB
QML
// Copyright (C) 2024 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
import QtQuick
|
|
import QtQuick3D
|
|
import QtQuick3D.Helpers
|
|
import QtMultimedia
|
|
|
|
Node {
|
|
id: fire
|
|
scale: Qt.vector3d(1, 1, 1)
|
|
property alias windDir: material.windDir
|
|
property alias windstrength: material.windstrength
|
|
property alias fireColor: material.color
|
|
property alias lightColor: light.color
|
|
property alias baseSize: material.baseSize
|
|
property real brightness: 10
|
|
property real life: 0
|
|
readonly property bool isOn: (life > 0)
|
|
function start() {
|
|
life = 1
|
|
}
|
|
|
|
function stop() {
|
|
life = 0
|
|
}
|
|
|
|
Behavior on life {
|
|
NumberAnimation {
|
|
duration: 500
|
|
easing.type: Easing.OutBack
|
|
}
|
|
}
|
|
|
|
CustomMaterial {
|
|
id: material
|
|
shadingMode: CustomMaterial.Unshaded
|
|
sourceBlend: CustomMaterial.One
|
|
destinationBlend: CustomMaterial.OneMinusSrcColor
|
|
sourceAlphaBlend: CustomMaterial.One
|
|
destinationAlphaBlend: CustomMaterial.OneMinusSrcColor
|
|
cullMode: Material.NoCulling
|
|
vertexShader: "media/shaders/fire.vert"
|
|
fragmentShader: "media/shaders/fire.frag"
|
|
property real time: 0
|
|
property color color: "white"
|
|
property real baseSize: 0
|
|
|
|
FrameAnimation {
|
|
id: frameAnimation
|
|
running: true
|
|
onTriggered: {
|
|
material.time += 0.1 * frameTime
|
|
}
|
|
}
|
|
|
|
property real windstrength: 1.0
|
|
property vector2d windDir: Qt.vector2d(0.5, 0.5);
|
|
|
|
property TextureInput fireTexture : TextureInput {
|
|
texture: Texture {
|
|
sourceItem: FireResources.fireVideo
|
|
}
|
|
}
|
|
|
|
property TextureInput turbulence : TextureInput {
|
|
texture: CommonResources.turbulenceTexture
|
|
}
|
|
}
|
|
|
|
PointLight {
|
|
id: light
|
|
brightness:fire.brightness * fire.life + 0.01
|
|
color: "orange"
|
|
}
|
|
Model {
|
|
visible: fire.isOn
|
|
materials: [
|
|
material
|
|
]
|
|
|
|
opacity: Math.min(1., fire.life)
|
|
scale: Qt.vector3d(fire.life, fire.life, fire.life)
|
|
geometry: FireResources.fireMesh
|
|
}
|
|
}
|