149void QQuick3DParticleScaleAffector::affectParticle(
const QQuick3DParticleData &, QQuick3DParticleDataCurrent *d,
float time)
153 const auto fract = [](
const float v) ->
float {
154 return v - qFloor(v);
156 const auto lerp = [](
const float a,
const float b,
const float f) ->
float {
157 return a + (b - a) * f;
159 const auto smoothstep = [](
const float a,
const float b,
const float f) ->
float {
160 return a + (b - a) * f * f * (3.0f - 2.0f * f);
163 float pos = fract(time /
float(m_duration * 0.001f));
166 scale = lerp(m_minSize, m_maxSize, m_easing.valueForProgress(pos));
167 scale = qMax(scale, 0.0f);
171 scale = lerp(m_minSize, m_maxSize, m_easing.valueForProgress(pos * 2.0f));
173 scale = lerp(m_maxSize, m_minSize, m_easing.valueForProgress((pos - 0.5) * 2.0f));
174 scale = qMax(scale, 0.0f);
177 scale = m_minSize + (m_maxSize - m_minSize) * (1.0f + qSin(2.0f *
M_PI * pos)) * 0.5f;
180 scale = m_minSize + (m_maxSize - m_minSize) * qAbs(qSin(2.0f *
M_PI * pos));
189 scale = smoothstep(m_minSize, m_maxSize, pos);