mirror of https://github.com/qt/qtdoc.git
104 lines
2.9 KiB
QML
104 lines
2.9 KiB
QML
// Copyright (C) 2024 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
pragma Singleton
|
|
|
|
import QtQuick
|
|
import QtQuick3D
|
|
import QtMultimedia
|
|
import QtQuick3D.Helpers
|
|
|
|
Node {
|
|
property alias fireVideo: video_out
|
|
property alias fireMesh: fire_mesh
|
|
VideoOutput {
|
|
id: video_out
|
|
fillMode: VideoOutput.Stretch
|
|
width: 512
|
|
height: 512
|
|
visible: false
|
|
MediaPlayer {
|
|
id: player
|
|
source: "media/textures/fire.mp4"
|
|
loops: MediaPlayer.Infinite
|
|
autoPlay: true
|
|
videoOutput: FireResources.fireVideo
|
|
}
|
|
}
|
|
|
|
ProceduralMesh {
|
|
id: fire_mesh
|
|
Component.onCompleted: {
|
|
generateMesh()
|
|
}
|
|
function generateMesh() {
|
|
|
|
let verts = []
|
|
let uvs = []
|
|
let indices = []
|
|
let colrs = []
|
|
|
|
const xOffset = 0.
|
|
const zOffset = 0.
|
|
const countX = 5.
|
|
const countZ = 5.
|
|
const segments = 30.
|
|
const height = 100.
|
|
const thickness = 100.
|
|
const thicknessHalf = thickness * 0.5
|
|
const segmentHeight = height / segments
|
|
|
|
let pos = Qt.vector3d(0, 0, 0)
|
|
let index = 0
|
|
let blade = 0.0;
|
|
|
|
for (var xx = 0.; xx < countX; ++xx) {
|
|
for (var zz = 0.; zz < countZ; ++zz) {
|
|
|
|
pos.x = xx * xOffset
|
|
pos.z = zz * zOffset
|
|
|
|
const xxNorm = xx / countX
|
|
const zzNorm = zz / countZ
|
|
|
|
const fBlade = blade / (countX*countZ)
|
|
++blade
|
|
|
|
for (var ss = 0.; ss <= segments; ++ss) {
|
|
|
|
const uvY = ss / segments
|
|
|
|
const posLX = pos.x - thicknessHalf
|
|
const posLY = segmentHeight * ss + pos.y
|
|
const posLZ = pos.z
|
|
|
|
verts.push(Qt.vector3d(posLX, posLY, posLZ));
|
|
uvs.push(Qt.vector2d(0, uvY))
|
|
colrs.push(Qt.vector4d(fBlade, 0, xxNorm, zzNorm))
|
|
|
|
const posRX = pos.x + thicknessHalf
|
|
const posRY = segmentHeight * ss + pos.y
|
|
const posRZ = pos.z
|
|
|
|
verts.push(Qt.vector3d(posRX, posRY, posRZ));
|
|
uvs.push(Qt.vector2d(1.0, uvY))
|
|
colrs.push(Qt.vector4d(fBlade, 0, xxNorm, zzNorm))
|
|
|
|
if (ss < segments) {
|
|
indices.push(index, index + 1, index + 2)
|
|
indices.push(index + 2, index + 1, index + 3)
|
|
}
|
|
index += 2
|
|
}
|
|
}
|
|
}
|
|
|
|
positions = verts
|
|
uv0s = uvs
|
|
colors = colrs
|
|
indexes = indices
|
|
}
|
|
}
|
|
}
|
|
|
|
|