Spec-Zone.ru › Qt 5.11

Тип QML CustomParticle

Для указания шейдеров для отрисовки частиц. Подробнее...

Заявление об импорте: import QtQuick.Particles 2.11
Наследует:

ParticlePainter

  • Список всех членов, включая унаследованные

Свойства

  • fragmentShader : строка
  • vertexShader : строка

Подробное описание

Примечание: Максимальное количество пользовательских частиц ограничено 16383.

Документация по свойствам

fragmentShader : строка

Это свойство содержит исходный код фрагментного шейдера GLSL. По умолчанию шейдер ожидает, что координата текстуры будет передана из вершинного шейдера как "varying highp vec2 qt_TexCoord0", и он сэмплирует из sampler2D с именем "source".

vertexShader : строка

Это свойство содержит исходный код вершинного шейдера GLSL.

По умолчанию шейдер передает координату текстуры фрагментному шейдеру как "varying highp vec2 qt_TexCoord0".

Для облегчения написания вершинного шейдера частиц, к вашему вершинному шейдеру предваряется следующий код GLSL:

attribute highp vec2 qt_ParticlePos;
attribute highp vec2 qt_ParticleTex;
attribute highp vec4 qt_ParticleData; //  x = time,  y = lifeSpan, z = size,  w = endSize
attribute highp vec4 qt_ParticleVec; // x,y = constant velocity,  z,w = acceleration
attribute highp float qt_ParticleR;
uniform highp mat4 qt_Matrix;
uniform highp float qt_Timestamp;
varying highp vec2 qt_TexCoord0;
void defaultMain() {
    qt_TexCoord0 = qt_ParticleTex;
    highp float size = qt_ParticleData.z;
    highp float endSize = qt_ParticleData.w;
    highp float t = (qt_Timestamp - qt_ParticleData.x) / qt_ParticleData.y;
    highp float currentSize = mix(size, endSize, t * t);
    if (t < 0. || t > 1.)
        currentSize = 0.;
    highp vec2 pos = qt_ParticlePos
                   - currentSize / 2. + currentSize * qt_ParticleTex   // adjust size
                   + qt_ParticleVec.xy * t * qt_ParticleData.y         // apply velocity vector..
                   + 0.5 * qt_ParticleVec.zw * pow(t * qt_ParticleData.y, 2.);
    gl_Position = qt_Matrix * vec4(pos.x, pos.y, 0, 1);
}

defaultMain() — это тот же код, что и в стандартном шейдере, вы можете вызывать его для основных функций частиц, а затем добавлять дополнительные переменные для пользовательских эффектов. Обратите внимание, что вершинный шейдер для частиц отвечает за моделирование движения частиц со временем, а сами данные частиц содержат только начальную позицию и время появления.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qml-qtquick-particles-customparticle.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API