Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qquick3dparticlemodelblendparticle_p.h
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#ifndef QQUICK3DMODELBLENDPARTICLE_H
5#define QQUICK3DMODELBLENDPARTICLE_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QColor>
19#include <QVector4D>
20#include <QMatrix4x4>
21
22#include <QtQuick3DParticles/private/qquick3dparticle_p.h>
23#include <QtQuick3DParticles/private/qquick3dparticlesystem_p.h>
24#include <QtQuick3DParticles/private/qquick3dparticledata_p.h>
25#include <QtQuick3D/private/qquick3dmodel_p.h>
26#include <QtQuick3D/private/qquick3dgeometry_p.h>
27
29
31class Q_QUICK3DPARTICLES_EXPORT QQuick3DParticleModelBlendParticle : public QQuick3DParticle
32{
34 Q_PROPERTY(QQmlComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged)
35 Q_PROPERTY(QQuick3DNode *endNode READ endNode WRITE setEndNode NOTIFY endNodeChanged)
36 Q_PROPERTY(ModelBlendMode modelBlendMode READ modelBlendMode WRITE setModelBlendMode NOTIFY modelBlendModeChanged)
37 Q_PROPERTY(int endTime READ endTime WRITE setEndTime NOTIFY endTimeChanged)
38 Q_PROPERTY(QQuick3DNode *activationNode READ activationNode WRITE setActivationNode NOTIFY activationNodeChanged)
39 Q_PROPERTY(ModelBlendEmitMode emitMode READ emitMode WRITE setEmitMode NOTIFY emitModeChanged)
40 QML_NAMED_ELEMENT(ModelBlendParticle3D)
42
43public:
46
48 {
51 Transfer
52 };
53 Q_ENUM(ModelBlendMode)
54
56 {
59 Activation
60 };
61 Q_ENUM(ModelBlendEmitMode)
62
63 QQmlComponent *delegate() const;
64 QQuick3DNode *endNode() const;
65 ModelBlendMode modelBlendMode() const;
66 int endTime() const;
67 QQuick3DNode *activationNode() const;
68 ModelBlendEmitMode emitMode() const;
69
70public Q_SLOTS:
71 void setDelegate(QQmlComponent *setDelegate);
72 void setEndNode(QQuick3DNode *endNode);
73 void setEndTime(int endTime);
74 void setModelBlendMode(ModelBlendMode mode);
75 void setActivationNode(QQuick3DNode *activationNode);
76 void setEmitMode(ModelBlendEmitMode emitMode);
77
86
87protected:
88 void itemChange(ItemChange, const ItemChangeData &) override;
89 void reset() override;
90 bool lastParticle() const;
91 void doSetMaxAmount(int amount) override;
92 void componentComplete() override;
93 int nextCurrentIndex(const QQuick3DParticleEmitter *emitter) override;
94 void setParticleData(int particleIndex,
95 const QVector3D &position,
96 const QVector3D &rotation,
97 const QVector4D &color,
98 float size, float age);
99 QVector3D particleCenter(int particleIndex) const;
100 QVector3D particleEndPosition(int particleIndex) const;
101 QVector3D particleEndRotation(int particleIndex) const;
102 int randomIndex(int particleIndex);
104 {
105 markAllDirty();
106 update();
107 }
108
109private:
112
113 struct TriangleParticleData
114 {
116 QVector3D rotation;
117 QVector3D center;
119 float age = 0.0f;
120 float size = 1.0f;
121 int emitterIndex = -1;
122 };
123
124 struct PerEmitterData
125 {
126 int particleCount = 0;
127 int emitterIndex = -1;
128 const QQuick3DParticleEmitter *emitter = nullptr;
129 };
130
131 QSSGRenderGraphObject *updateSpatialNode(QSSGRenderGraphObject *node) override;
132 void updateParticleBuffer(QSSGParticleBuffer *buffer, const QMatrix4x4 &sceneTransform);
133 void regenerate();
134 void updateParticles();
135 void handleEndNodeChanged();
136 PerEmitterData &perEmitterData(int emitterIndex);
137
138 QVector<TriangleParticleData> m_triangleParticleData;
139 QVector<QVector3D> m_centerData;
140 QHash<QByteArray, QMetaObject::Connection> m_connections;
141 QMap<const QQuick3DParticleEmitter *, PerEmitterData> m_perEmitterData;
142 QVector<int> m_randomParticles;
143 PerEmitterData n_noPerEmitterData;
144 int m_nextEmitterIndex = 0;
145 QQmlComponent *m_delegate = nullptr;
146 QQuick3DModel *m_model = nullptr;
147 QQuick3DGeometry *m_modelGeometry = nullptr;
148 QQuick3DNode *m_endNode = nullptr;
149 QVector3D m_endNodePosition;
150 QVector3D m_endNodeRotation;
151 QVector3D m_endNodeScale;
152 QMatrix4x4 m_endRotationMatrix;
153 int m_particleCount = 0;
154 ModelBlendMode m_modelBlendMode = Explode;
155 int m_endTime = 0;
156 bool m_dataChanged = true;
157 ModelBlendEmitMode m_emitMode = Sequential;
158 QQuick3DNode *m_activationNode = nullptr;
159 float m_maxTriangleRadius = 0.f;
160};
161
163
164#endif
DarwinBluetooth::DeviceInquiryDelegate * m_delegate
The QMatrix4x4 class represents a 4x4 transformation matrix in 3D space.
Definition qmatrix4x4.h:25
The QQmlComponent class encapsulates a QML component definition.
\qmltype Geometry \inherits Object3D \inqmlmodule QtQuick3D \instantiates QQuick3DGeometry
The QVector3D class represents a vector or vertex in 3D space.
Definition qvectornd.h:171
The QVector4D class represents a vector or vertex in 4D space.
Definition qvectornd.h:330
Combined button and popup list for selecting options.
GLenum mode
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLenum GLuint buffer
GLuint color
[2]
GLboolean reset
#define QML_NAMED_ELEMENT(NAME)
#define QML_ADDED_IN_VERSION(MAJOR, MINOR)
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
#define Q_ENUM(x)
#define Q_PROPERTY(...)
#define Q_OBJECT
#define Q_SLOTS
#define Q_SIGNALS
rect sceneTransform().map(QPointF(0