25 Q_PROPERTY(
int segmentCount READ segmentCount WRITE setSegmentCount NOTIFY segmentCountChanged)
26 Q_PROPERTY(
float alphaFade READ alphaFade WRITE setAlphaFade NOTIFY alphaFadeChanged)
27 Q_PROPERTY(
float scaleMultiplier READ scaleMultiplier WRITE setScaleMultiplier NOTIFY scaleMultiplierChanged)
28 Q_PROPERTY(
float texcoordMultiplier READ texcoordMultiplier WRITE setTexcoordMultiplier NOTIFY texcoordMultiplierChanged)
29 Q_PROPERTY(
float length READ length WRITE setLength NOTIFY lengthChanged)
30 Q_PROPERTY(
float lengthVariation READ lengthVariation WRITE setLengthVariation NOTIFY lengthVariationChanged)
31 Q_PROPERTY(
float lengthDeltaMin READ lengthDeltaMin WRITE setLengthDeltaMin NOTIFY lengthDeltaMinChanged)
32 Q_PROPERTY(
int eolFadeOutDuration READ eolFadeOutDuration WRITE setEolFadeOutDuration NOTIFY eolFadeOutDurationChanged)
33 Q_PROPERTY(TexcoordMode texcoordMode READ texcoordMode WRITE setTexcoordMode NOTIFY texcoordModeChanged)
35 QML_NAMED_ELEMENT(LineParticle3D)
36 QML_ADDED_IN_VERSION(6, 4)
47 QQuick3DParticleLineParticle(QQuick3DNode *parent =
nullptr);
48 ~QQuick3DParticleLineParticle() override;
50 int segmentCount()
const;
51 float alphaFade()
const;
52 float scaleMultiplier()
const;
53 float texcoordMultiplier()
const;
55 float lengthVariation()
const;
56 float lengthDeltaMin()
const;
57 int eolFadeOutDuration()
const;
58 TexcoordMode texcoordMode()
const;
61 void setSegmentCount(
int count);
62 void setAlphaFade(
float fade);
63 void setScaleMultiplier(
float multiplier);
64 void setTexcoordMultiplier(
float multiplier);
65 void setLength(
float length);
66 void setLengthVariation(
float length);
67 void setLengthDeltaMin(
float min);
68 void setEolFadeOutDuration(
int duration);
69 void setTexcoordMode(QQuick3DParticleLineParticle::TexcoordMode mode);
72 void segmentCountChanged();
73 void alphaFadeChanged();
74 void scaleMultiplierChanged();
75 void texcoordMultiplierChanged();
77 void lengthVariationChanged();
78 void lengthDeltaMinChanged();
79 void eolFadeOutDurationChanged();
80 void texcoordModeChanged();
86 int emitterIndex = -1;
101 struct FadeOutLineData
104 SpriteParticleData endPoint;
105 LineDataHeader header;
106 QVector<LineData> lineData;
112 friend class QQuick3DParticleSystem;
114 class LineParticleUpdateNode :
public ParticleUpdateNode
117 LineParticleUpdateNode(QQuick3DNode *parent =
nullptr)
118 : ParticleUpdateNode(parent)
121 QSSGRenderGraphObject *updateSpatialNode(QSSGRenderGraphObject *node) override;
124 void updateLineBuffer(LineParticleUpdateNode *updateNode, QSSGRenderGraphObject *node);
125 QSSGRenderGraphObject *updateLineNode(QSSGRenderGraphObject *node);
126 void handleSegmentCountChanged();
127 void updateLineSegment(
int particleIndex);
128 void clearSegment(
int particleIndex);
129 void handleMaxAmountChanged(
int amount) override;
130 void handleSystemChanged(QQuick3DParticleSystem *system) override;
131 void reset() override;
132 void commitParticles(
float time) override;
133 int nextCurrentIndex(
const QQuick3DParticleEmitter *emitter) override;
134 void saveLineSegment(
int particleIndex,
float time);
135 void setParticleData(
int particleIndex,
136 const QVector3D &position,
137 const QVector3D &rotation,
138 const QVector4D &color,
139 float size,
float age,
140 float animationFrame) override;
141 void resetParticleData(
int particleIndex) override;
143 QVector<LineDataHeader> m_lineHeaderData;
144 QVector<LineData> m_lineData;
145 QVector<FadeOutLineData> m_fadeOutData;
147 float m_alphaFade = 0.0f;
148 float m_scaleMultiplier = 1.0f;
149 float m_texcoordMultiplier = 1.0f;
150 float m_lengthDeltaMin = 10.0f;
151 float m_length = -1.0f;
152 float m_lengthVariation = 0.0f;
153 int m_segmentCount = 1;
154 int m_eolFadeOutDuration = 0;
155 TexcoordMode m_texcoordMode = TexcoordMode::Absolute;
QSSGRenderParticles::FeatureLevel lineFeatureLevel(QQuick3DParticleSpriteParticle::FeatureLevel in)
static QVector3D qt_normalFromRotation(const QVector3D &eulerRotation)