рдпрд╣ рдкреЛрд╕реНрдЯ
"рд╕реНрдорд╛рд░реНрдЯ рдлреЛрди рдлреЙрд░ рд╕реНрдорд╛рд░реНрдЯ рдкреЛрд╕реНрдЯ" рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрддреА рд╣реИ
рдпрд╣ рдкреЛрд╕реНрдЯ рдШреЛрд╖рдгрд╛рддреНрдордХ QML рднрд╛рд╖рд╛ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде OpenGL рд╢реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╡рд┐рд╖рдп рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рдХреНрдпреВрдПрдордПрд▓ 2.0 рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж рд╕реЗ рдпрд╣ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреИрдХреЗрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдУрдкреЗрдирдЧреЗрд▓ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред рд╢реЗрдбрд┐рдВрдЧ рд▓рд┐рдЦрдирд╛ рдПрдХ рдЖрд╕рд╛рди рд╡рд┐рд╖рдп рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХрд╛ рд▓рдХреНрд╖реНрдп рдпрд╣ рд╣реИ рдХрд┐, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕реЗ рдкрдврд╝рдиреЗ рд╡рд╛рд▓рд╛ рд╡реНрдпрдХреНрддрд┐ рддреБрд░рдВрдд рдЦреБрдж рдХреЗ рд▓рд┐рдП рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:

рдЕрдВрдд рдореЗрдВ рдореИрдВ рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░реВрдВрдЧрд╛ рдЬрд╣рд╛рдВ рдЖрдк рдЗрд╕ рд╡рд┐рд╖рдп рдХреЗ рдЖрдЧреЗ рдХреЗ рдЧрд╣рди рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдпрд╣ рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд░реБрдЪрд┐рдХрд░ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рд░реЛрдЪрдХ рд╢реЗрдбреНрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреВрдПрдордПрд▓ рднрд╛рд╖рд╛ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдХреНрдпреВрдПрдордПрд▓ рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╢реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
ShaderEffectItem , рдХрдИ
Qt3D рдХрдХреНрд╖рд╛рдПрдВ рдЬреЛ OpenGL рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░рддреА рд╣реИрдВ, рдЖрджрд┐ред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВ
ShaderEffectItem
рддрддреНрд╡ рдХреЗ рд╕рд╛рде
ShaderEffectSource рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди
рдХрд░реВрдБрдЧрд╛ ред
рдЗрд╕ рд▓реЗрдЦ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:
ShaderEffectItem рдФрд░ ShaderEffectSource рд╕реЗрдЯ рдХрд░рдирд╛рдереЛрдбрд╛ shader рд╕рд┐рджреНрдзрд╛рдВрддрдЖрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде QML рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛рдЙрджрд╛рд╣рд░рдг 1. рд╢реЗрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдврд╛рд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛рдЙрджрд╛рд╣рд░рдг 2.1 рд╕рдмрд╕реЗ рд╕рд░рд▓ рдПрдиреАрдореЗрд╢рдирдЙрджрд╛рд╣рд░рдг 2.2 рдПрдиреАрдореЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдореЗрдиреВ рдмрдирд╛рдирд╛рдЙрджрд╛рд╣рд░рдг 3. рдорд╛рдЙрд╕ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреБрдЫ рдмрдирд╛рд╡рдЯ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВрдЙрджрд╛рд╣рд░рдг 4. рджреЛ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдирд╛рдирд┐рд╖реНрдХрд░реНрд╖рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХрдЖрдЗрдП рдЖрд╡рд╢реНрдпрдХ рддрддреНрд╡реЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВред
рдЖрд╡рд╢реНрдпрдХ рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛
рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдиреЗ рдУрдкрдирдЬреАрдПрд▓ рдХреЗ рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИред
1)
рд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг
рдХрд░реЗрдВ рдФрд░ рдЖрдк git рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкрддрд╛ рджреЗрдЦреЗрдВрдЧреЗ рдЬрд╣рд╛рдВ shadersplugin рдЭреВрда рд╣реИред рдЕрдЧрд░ рдХреБрдЫ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЗрд╕ рддрд░рд╣ рд╣реИ:
git://gitorious.org/qt-labs/qml1-shadersplugin.git
2)
git clone git://gitorious.org/qt-labs/qml1-shadersplugin.git
рдмрдирд╛рдУ
git clone git://gitorious.org/qt-labs/qml1-shadersplugin.git
3) рд╣рдо рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реВрдВ, рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдУрдПрд╕ рдХреЗ рддрд╣рдд рд╕рдорд╛рди рддрддреНрд╡ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ)ред рдпрджрд┐ рдХреЛрдИ рдУрдкрдирдЧреЗрд▓ рдШрдЯрдХ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдЪреЗрдХ рдЖрдкрдХреЗ рд▓рд┐рдП рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рддреЛ рдмрд╕ рдПрдХ рдЦрд╛рд▓реА Qt рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ: рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ (* .pro) рдХреЗ
QT += declarative opengl
ред рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдереЛрдбрд╛ shader рд╕рд┐рджреНрдзрд╛рдВрдд
рд╢реЗрдбреНрд╕ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдЗрд╕ рдЫреЛрдЯреЗ рдЕрдзреНрдпрд╛рдп рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ, рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рджреВрдВрдЧрд╛ред рд╣рдореЗрдВ shaders рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рд╕рд░рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╢реЗрдбрд░ рдкреНрд░рд╛рдЗрдорд░реА рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ "рд╣рд╕реНрддрдХреНрд╖реЗрдк" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рд▓рд┐рдЦрдХрд░ рдХрдиреНрд╡реЗрдпрд░ рдХреЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ (рдЬреЛ рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреА)ред рд╢реЗрдбреНрд╕ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, GLSL (OpenGL Shading Language) рд╣реИ, рдЬреЛ OpenGL рд╕рдорд┐рддрд┐ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИред рдЗрд╕рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╕реАред рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдкрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддрд╛рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХрд╛ рдУрдкрдирдЧреЗрд▓ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдмрд▓ рдкреЙрдЗрдВрдЯреНрд╕ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╣реЛ, рдЬреЛ рдХрд┐ рдЪрд░рдгреЛрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИ, рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдУрдПрдирдЬреАрд╕реАрдПрд▓ рдХрдорд╛рдВрдб рдЪрд▓рддреЗ рд╣реИрдВ)ред рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЪрд┐рддреНрд░ рдореЗрдВ рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рдХрдиреНрд╡реЗрдпрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ рдХрд╛ рд╢реАрд░реНрд╖ рдкрд╛рдЗрдк рд▓рд╛рдЗрди рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рдордиреНрд╡рдп рдкрд░рд┐рд╡рд░реНрддрди (рд╡рд░реНрдЯреЗрдХреНрд╕ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди) рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреА рджреБрдирд┐рдпрд╛, рджреГрд╢реНрдп рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдореИрдЯреНрд░рд┐рд╕реЗрд╕ред рдпрд╣ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдЗрди рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрджрд┐рдо (рдЕрд╕реЗрдВрдмрд▓реА) рдХреА рдЕрд╕реЗрдВрдмрд▓реА рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ: рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╕реНрдерд╛рдирд┐рдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ (x, y, z) рдЖрдпрд╛рдо рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ (4 x 4) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╕реНрдХреНрд░реАрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ, рддреНрд░рд┐-рдЖрдпрд╛рдореА (рд╡рд┐рд╢реНрд╡) рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕реЗ рджреЛ-рдЖрдпрд╛рдореА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХред рдкрд╛рдЗрдк рд▓рд╛рдЗрди рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ, рд╡рд░реНрдЯрд┐рдХрд▓ рдХреЛ рддреНрд░рд┐рдХреЛрдг рдореЗрдВ рдмрд╛рдВрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд░реИрд╕реНрдЯрд░рд╛рдЗрдЬреЗрд╢рди (рд░реЗрд╕реНрдЯрд░рд╛рдЗрдЬреЗрд╢рди) рдореЗрдВ рдлреАрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░реИрд╕реНрдЯрд░рд╛рдЗрдЬрд╝рд░ рддреНрд░рд┐рдХреЛрдг рдХреЛ рдЯреБрдХрдбрд╝реЛрдВ (рдкрд┐рдХреНрд╕реЗрд▓) рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдФрд░ рд░рдВрдЧ рдЖрдкрд╕ рдореЗрдВ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред рдлрд┐рд░ рдЖрддрд╛ рд╣реИ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдоред рд╡рд╣ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреЗрд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╕рддрд╣ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рд╕реЗ рдмрдВрдзреЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рднреАрддрд░ рд╕реНрдХреНрд░реАрди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд░рдВрдЧ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЗрди рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкрд░рд┐рдгрд╛рдореА рдЯреБрдХрдбрд╝реЗ рдХреЛ рдлреНрд░реЗрдо рдмрдлрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рд╕реНрдХреНрд░реАрди (рдкрд┐рдХреНрд╕реЗрд▓ рдЕрдкрдбреЗрдЯ) рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдордЭ рдЪреБрдХреЗ рд╣реИрдВ, рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╢реЗрдб рд╣реИрдВ: рд╡рд░реНрдЯреЗрдХреНрд╕ рдФрд░ рдЯреБрдХрдбрд╝рд╛ (рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рдХреЛ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд░рдВрдЧ, (
.r, .g, .b, .a
), рдЧрд╣рд░рд╛рдИ,
рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ (
.x, .y, .z, .w
) рдЬреИрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдореВрд╣ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ
.x, .y, .z, .w
.s, .t, .p, .q
рдпрд╛
.s, .t, .p, .q
)ред рд╢реЗрдбрд░ рдХрд╛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ
void main()
рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╢реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рджреЛ рдореБрдЦреНрдп рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рд╣реИрдВред
main
рдХрд╛рд░реНрдп рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред GLSL рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ:
uniform
- рдмрд╛рд╣рд░реА рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде shader рдХрд╛ рдХрдиреЗрдХреНрд╢рди (QML рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рддрддреНрд╡реЛрдВ рдХреЗ рдЧреБрдг рд╣реЛрдВрдЧреЗ); рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ;
varying
-
varying
- рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдпрд╛рдиреА рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдЯреБрдХрдбрд╝рд╛ рд╢реЗрд▓реНрдбрд░ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдирд╛ред рд╢реАрд░реНрд╖ рдХреА рдЫрд╛рдпрд╛ рдореЗрдВ рд╡реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЯреБрдХрдбрд╝реЗ рдХреА рдЫрд╛рдпрд╛ рдореЗрдВ рд╡реЗ рдХреЗрд╡рд▓-рдкрдврд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ;
attribute
- рд╡реИрд╢реНрд╡рд┐рдХ рдЧреБрдВрдЬрд╛рдЗрд╢ рдЪрд░;
рд╣рдореЗрдВ рдЬреАрдПрд▓рдПрд╕рдПрд▓ рднрд╛рд╖рд╛ рдХреЗ рдХреБрдЫ рддрддреНрд╡реЛрдВ рдХрд╛ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ:
sampler2D
-
sampler2D
рднрд╛рд╖рд╛ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдмрдирд╛рд╡рдЯ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ (sampler1D, sampler3D, samplerCube, sampler1Dshadow, sampler2Dshadow рднреА рд╣реИ);
vec4 texture2D(sampler2D s, vec2 coord)
- рдмрдирд╛рд╡рдЯ
s
рд╕реЗ рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди, рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕рд╛рдеред
gl_FrontColor
рдПрдХ рд╡реЗрдХреНрдЯрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрдВрддрд┐рдо рд░рдВрдЧреАрди рдмрдирд╛рд╡рдЯ рдбреЗрдЯрд╛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬреЛ рдХреЗрд╡рд▓ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред
рдпрд╣ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдХрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрднрд┐рдХрд▓рди рдХреЗ рд▓рд┐рдП рдЙрдиреНрдореБрдЦ рдХрд░рддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡реИрдХреНрдЯрд░ рдФрд░ рдореИрдЯреНрд░рд┐рд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдХреНрд░рдо рдореЗрдВ, рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЖрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде QML рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛
QML рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрдбрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛
QDeclarativeView рд╢реНрд░реЗрдгреА рдХреА рд╡рд╕реНрддреБ рдореЗрдВ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП OpenGL рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИ:
QmlApplicationViewer viewer; ... QGLWidget* glWidget = new QGLWidget(format); ... viewer.setViewport(glWidget); ...
рдХреЛрдб рдХрд╛ рдпрд╣ рдЯреБрдХрдбрд╝рд╛
QmlApplicationViewer
(Qt рдХреНрд╡рд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдЬрд╝рд╛рд░реНрдб рджреНрд╡рд╛рд░рд╛) рдореЗрдВ рдЙрддреНрдкрдиреНрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ -
main
,
QmlApplicationViewer
рд╡рд░реНрдЧ
QmlApplicationViewer
рд╡рд┐рд░рд╛рд╕рдд
QmlApplicationViewer
рдорд┐рд▓рд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рдж, рдореИрдВ рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░реВрдВрдЧрд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдУрдкрдирдЬреАрдПрд▓
ShaderEffectItem
рд╕рд╛рде рдХрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
ShaderEffectItem
рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдЖрдкрдХреЛ OpenGL рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХреНрд░реАрди рдкрд░ рд╡рд┐рднрд┐рдиреНрди QML рддрддреНрд╡реЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣
Qt.labs.shaders 1.0
рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдзреАрди рд╣реИ), рд▓реЗрдХрд┐рди рдЕрдм рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд░реНрдЯреЗрдХреНрд╕ рдФрд░ рдЯреБрдХрдбрд╝рд╛
рд╢реЗрдб рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреБрдгреЛрдВ (рдкреНрд░рдХрд╛рд░
string
) рдХреЗ
рдЯреБрдХрдбрд╝реЗ рдХреНрд░рдорд╢рдГ
рд╢реЗрдбрд░ рдФрд░
рд╡рд░реНрдЯреЗрдХреНрд╢рдбрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП
рдЬрд╛рддреЗ рд╣реИрдВред
ShaderEffectSource
рдЙрд╕ QML рдШрдЯрдХ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ shader рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ
sourceItem рдФрд░
HideSource рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдкрд╣рд▓реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрдпреВрдПрдордПрд▓ рддрддреНрд╡ (рдЗрд╕рдХреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛) рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╢реЗрдбрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ "рдкреНрд░рднрд╛рд╡рд┐рдд" рд╣реЛрдЧрд╛, рдФрд░
hideSource
"рдХрд╣рддрд╛ рд╣реИ" рдХрд┐ рдореВрд▓ рддрддреНрд╡ рдЫрд┐рдкрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд╢реЗрдбрд░ рдкреНрд░рднрд╛рд╡ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп
ShaderEffectItems
рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ
ShaderEffectItems
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ
source
рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рддрддреНрд╡ рдХреЗ рдПрдХ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ
ShaderEffectItems
рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдПрдХ redraw рд▓реВрдк рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░реЗрдЧрд╛ред
рдХреНрдпреВрдПрдордПрд▓ рдореЗрдВ рдПрдХ рддрддреНрд╡ (
property
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдФрд░ рд╡реЗ shader рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗред рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЙрдирдХреЗ рдирд╛рдо рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЫрд╛рдпрд╛ рдореЗрдВ рдЪрд░ рдкрд╣рд▓реЗ рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдП рдЧрдП
uniform
рд╕реНрдкреЗрд╕рд┐рдпрд░ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рддрдерд╛рдХрдерд┐рдд рдмрд╛рдзреНрдпрдХрд╛рд░реАред рдЬрдм рд╣рдо рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдорд┐рд▓реЗрдВрдЧреЗ, рддреЛ рдпрд╣ рдХреНрд╖рдг рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдпрджрд┐ рд╣рдо рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд╛рд░ рдорд╛рдирддреЗ рд╣реИрдВ, рддреЛ QML рддрддреНрд╡ рдХрд╛ рдЧреНрд░рд╛рдлрд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмрдирд╛рд╡рдЯ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдЯреЗрдХреНрд╕ рдФрд░ рдлреНрд░реЗрдЧрдореЗрдВрдЯ рд╢реЗрдбреНрд╕ рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рддрджрдиреБрд╕рд╛рд░, рдЖрдк shader рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдЗрд╕ рдмрдирд╛рд╡рдЯ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ рдлрд┐рд░ рд╕реЗ рд╣рдо рд╡рд╛рдкрд╕реА рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпреЛрдВ shaders рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред
рдЕрдЧрд▓рд╛, рдХрдИ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЙрдиреНрд╣реЗрдВ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реЗ рд╣рд░ рдЬрдЧрд╣ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдХрд╛рдо рджрд┐рдЦрд╛рдПрдВрдЧреЗ, рдЕрд░реНрдерд╛рдд, рд╣рдо рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
рдЙрджрд╛рд╣рд░рдг 1. рд╢реЗрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдврд╛рд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛
рдЪрд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред QML рдореЗрдВ рдПрдХ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп
рдЖрдпрдд рддрддреНрд╡ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ
gradient
рдЧреБрдг рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк shader рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдврд╛рд▓ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ, 360 рдмрд╛рдп 360
Rectangle
рдПрд▓рд┐рдореЗрдВрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
ShaderEffectItem
рдореЗрдВ рдПрдХ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ
ShaderEffectItem
рдПрд▓рд┐рдореЗрдВрдЯ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ
anchors.fill
рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рд╕рд╛рде
parent
рд╡реИрд▓реНрдпреВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ shader рд╕рдВрдкреВрд░реНрдг рдореВрд▓ рддрддреНрд╡ рдХреЛ "рдХрд╡рд░" рдХрд░рддрд╛ рд╣реИред рдХреЛрдб рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
import QtQuick 1.0 import Qt.labs.shaders 1.0 Rectangle { width: 360 height: 360 ShaderEffectItem { anchors.fill: parent fragmentShader: " varying highp vec2 qt_TexCoord0; void main(void) { lowp vec4 c0 = vec4( 1.0, 1.0, 1.0, 1.0 ); lowp vec4 c1 = vec4( 1.0, 0.0, 0.0, 1.0 ); gl_FragColor = mix( c0, c1, qt_TexCoord0.y ); } " } }
рдЕрдм рдЖрдЗрдП
fragmentShader
рдкреНрд░реЙрдкрд░реНрдЯреА рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ - рдЗрд╕рдореЗрдВ рдлреНрд░реЗрдЧрд░реЗрдВрд╕ рд╢реЗрдбрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЯреЗрдХреНрд╕реНрдЯ рд╣реЛрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЙрдЪреНрдЪ рдЪрд░
varying highp vec2 qt_TexCoord0
рдХреЗ рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рд╣рдо рд╢реАрд░реНрд╖
varying highp vec2 qt_TexCoord0
рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдФрд░ рд╣рдо рд╡рд╣рд╛рдВ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
qt_TexCoord0
рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдмрдирд╛рд╡рдЯ рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рджреГрд╢реНрдп рдХрд╛ рд╕рдордиреНрд╡рдп рдХрд░рддреА рд╣реИ (рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдХреЛрдИ рдореБрдЭреЗ
qt_TexCoord0
рд╣реИ рдФрд░ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреИрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрдВрдкреНрдпреВрдЯрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ)ред рдЕрдм
main
рд╕рдорд╛рд░реЛрд╣ рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рджреЛ рд╡реИрдХреНрдЯрд░
c0
рдпреБрдХреНрдд рд╕рдлрд╝реЗрдж (рд░рдВрдЧ рдХреЛ рдЖрд░рдЬреАрдмреАрдП рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдФрд░ c1 - рд▓рд╛рд▓, рдФрд░ рдлрд┐рд░ рд╣рдо
mix
рдлрдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ, рдЖрдЙрдЯрдкреБрдЯ
gl_FragColor
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рд░реИрдЦрд┐рдХ рдкреНрд░рдХреНрд╖реЗрдк рдлрд╝рдВрдХреНрд╢рди:
mix (vec4 x, vec4 y, float a)
- рд╕реВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
x * ( 1.0 - a )+y * a
рдпрд╣рд╛рдБ
a
рдЪрд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдпред Y рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рд╕рджрд┐рд╢ рд╕рдордиреНрд╡рдп рдХреЗ рдЕрдиреБрд░реВрдк рдмрдирд╛рд╡рдЯ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рд╣реЛрдЧрд╛ред рддрджрдиреБрд╕рд╛рд░, рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧрд╛:

рдЪреВрдВрдХрд┐
qt_TexCoord0.y
y
рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рд╕рджрд┐рд╢ рд╕рдордиреНрд╡рдп рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рддрдХ рд╣реЛрдЧрд╛, рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдХреЛ рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдкрдВрдХреНрддрд┐ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
gl_FragColor = mix( c0, c1, qt_TexCoord0.y );
рдкрд░
gl_FragColor = mix( c0, c1, qt_TexCoord0.x );
.x
рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗрдХреНрдЯрд░
x
рд╕рд╛рде рд╕рдордиреНрд╡рдп рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рд╣рдо рдмрд┐рдирд╛ рдХрд┐рд╕реА рдврд╛рд▓ рдХреЗ рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рд╕рдм рдХреБрдЫ рдкреЗрдВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдРрд╕рд╛ рдХреЛрдб рд╣реЛрдЧрд╛ (рдпрд╣рд╛рдВ рдмрд┐рд▓реНрдХреБрд▓ рд╕рднреА рдкрд┐рдХреНрд╕реЗрд▓ рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ):
void main(void) { gl_FragColor = vec4 ( 1.0, 0.0, 0.0, 1.0 ); }
рд╡реЗрдХреНрдЯрд░ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ
x
рдФрд░
y
рдмрдЬрд╛рдп, рдЖрдк рдХреНрд░рдорд╢рдГ рдмрдирд╛рд╡рдЯ
s
рдФрд░
t
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реЛрдЧрд╛ред рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз
рд╣реИредрдЖрдЗрдП shader рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдиреАрдореЗрд╢рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рдЙрджрд╛рд╣рд░рдг 2.1 рд╕рдмрд╕реЗ рд╕рд░рд▓ рдПрдиреАрдореЗрд╢рди
рдЖрдЗрдП рдЧреНрд░рд╣ рдХреА рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

рд╣рдо рдЗрд╕реЗ рдХрд░реЗрдВрдЧреЗ, рдмреЗрд╢рдХ рдереЛрдбрд╝рд╛ рдмреЗрд╡рдХреВрдл рдкреНрд░рднрд╛рд╡, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА ... рдЬреИрд╕реЗ рдХрд┐ рдЧреНрд░рд╣ рджрд┐рд▓ рдХреА рддрд░рд╣ рдзрдбрд╝рдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ
Item
рддрддреНрд╡ рдореЗрдВ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
ShaderEffectSource
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕реЗ
source
рдХрд╣рд╛ рдЬрд╛рддрд╛
source
ред рд╢реЗрдбрд░ рдореЗрдВ рд╣реА,
uniform lowp sampler2D source;
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ
uniform lowp sampler2D source;
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдорд╛рд░реА рдмрдирд╛рд╡рдЯ (рдЧреНрд░рд╣ рдЫрд╡рд┐) рдХреЛ shader рдХреЛрдб рдФрд░ рдЙрд╕рдХреЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рдзреНрдпрдХрд╛рд░реА рдмрдирд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдПрдиреАрдореЗрд╢рди рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдордп рдХреЗ рд╕рд╛рде рдХреБрдЫ рдбреЗрдЯрд╛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдореИрдВ QML
рдкреНрд░реЙрдкрд░реНрдЯреА рдПрдирд┐рдореАрд╢рди рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдФрд░ рд╣рдореЗрдВ рдХреНрдпрд╛ рдбреЗрдЯрд╛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдпрд╣рд╛рдВ рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреИрд╕реЗ, рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рджреВрд╕рд░реЗ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рддрд░рд╣ рдПрдХ рдПрдиреАрдореЗрд╢рди рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛рдиреА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмрдирд╛рд╡рдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ x, y (рд╕рд╛рде рд╣реА рд░рдВрдЧ рдбреЗрдЯрд╛) рдХрд╛ рд╕рдордиреНрд╡рдп рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдо рдХреБрдЫ рдкрдбрд╝реЛрд╕реА рдкрд┐рдХреНрд╕реЗрд▓ (рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд░рдВрдЧ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде) рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЗрд╕реЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдиреЗрдВрдЧреЗ рдХрд╛рд░реНрдп, рдпрд╣ рдПрдХ
sin
рдХрд╛рд░реНрдп рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЪрд░ рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, 0 рд╕реЗ 360 рдбрд┐рдЧреНрд░реА рдХреЗ рдХреЛрдг рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрдиреАрдп рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдЖрдк
PropertyAnimation
рдореЗрдВ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ
PropertyAnimation
рдХреЛрдг рд╕рдВрдкрддреНрддрд┐
0.0
рд╕реЗ
360.0
рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИред
import QtQuick 1.0 import Qt.labs.shaders 1.0 Item { width: img.width height: img.height Image { id: img source: "images/space.jpg" } ShaderEffectItem { property variant source: ShaderEffectSource { sourceItem: img; hideSource: true } anchors.fill: img fragmentShader: " varying highp vec2 qt_TexCoord0; uniform lowp sampler2D source; uniform highp float angle; void main() { highp float wave = 0.01; highp float wave_x = qt_TexCoord0.x + wave * sin( radians( angle + qt_TexCoord0.x * 360.0 ) ); highp float wave_y = qt_TexCoord0.y + wave * sin( radians( angle + qt_TexCoord0.y * 360.0 ) ); highp vec4 texpixel = texture2D( source, vec2( wave_x, wave_y ) ); gl_FragColor = texpixel; }" property real angle : 0.0 PropertyAnimation on angle { to: 360.0 duration: 800 loops: Animation.Infinite } } }
рд╣рдо рдЙрдЪреНрдЪ
highp float wave = 0.01
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рджреЛрд▓рди рдЖрдпрд╛рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ
radians
рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдордЭрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдПрдВрдЧрд▓
angle
рдХреЗ рдорд╛рди рдХреЛ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ
angle
рддрд╕реНрд╡реАрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░рдл рдмрдврд╝реЗрдЧреА, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдХреБрдЫ рдФрд░ рд╢рд╛рдирджрд╛рд░ рдЪрд╛рд╣рд┐рдП- рдПрдХ тАЬрд╢рд╛рдирджрд╛рд░ рдХрдВрдЯреНрд░реЛрд╡рд░реНрд╕реАтАЭред рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреНрд░рдорд╢рдГ 0 рд╕реЗ 1 рддрдХ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП "360 рдХреЗ рдХреЛрдг рд╕реЗ рдкрд╛рдк рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрдкрдирд╛ рдЧреБрдгрди" рд╣реЛрдЧрд╛ред
wave_x
рдФрд░
wave_y
рдореИрдВ рдХреНрд░рдорд╢рдГ
x
рдЕрдХреНрд╖ рдФрд░
y
рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рд▓рд┐рдпрд╛ рдЧрдпрд╛, рдХреБрдЫ рдкрдбрд╝реЛрд╕реА рдкрдбрд╝реЛрд╕ рд╕реЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд░рд┐рдХреЙрд░реНрдб рдХрд░реВрдВрдЧрд╛ред
texture2D( source, vec2( wave_x, wave_y ) );
рд╣рдо рдЗрд╕ рдирдП рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ
gl_FragColor
рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ
gl_FragColor
рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рдЧреНрд░рд╣ рдХреА рддрд╕реНрд╡реАрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╡реАрдбрд┐рдпреЛ рдкрд░рд┐рдгрд╛рдо рд╣реИ:
рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз
рд╣реИредрдЙрджрд╛рд╣рд░рдг 2.2 рдПрдиреАрдореЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдореЗрдиреВ рдмрдирд╛рдирд╛
рдпрд╣ рдХрд╛рдлреА рд╕реБрдВрджрд░ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдореЗрдиреВ рдмрдЯрди рдкрд░ рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк рдмрдЯрди рдкрд░ рдордВрдбрд░рд╛рддреЗ рд╣реИрдВ рддреЛ рдПрдХ рдЧреНрд░рд╣ рдХреЗ рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╡рд░рдг
рдЗрд╕ рдЧрд╛рдЗрдб рд╕реЗ QML рдореЗрдВ рдореЗрдиреВ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдмрдЯрди
Button.qml
рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред рдореИрдВрдиреЗ рд╢реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЙрдирдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рдЬреЛрдбрд╝рд╛ред рдЯреБрдХрдбрд╝рд╛ shader рдХреЛрдб рд▓рдЧрднрдЧ рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдореИрдВрдиреЗ рдереЛрдбрд╝рд╛ рд╕рд╛ рджреЛрд▓рди рдЖрдпрд╛рдо
wave = 0.02
рдмрдврд╝рд╛рдпрд╛ рд╣реИ:
Button.qml рдлрд╝рд╛рдЗрд▓:
import QtQuick 1.0 import Qt.labs.shaders 1.0 Item { width: but.width height: but.height property alias text: textItem.text Rectangle { id: but width: 130; height: 40 border.width: 1 radius: 5 smooth: true gradient: Gradient { GradientStop { position: 0.0; color: "darkGray" } GradientStop { position: 0.5; color: "black" } GradientStop { position: 1.0; color: "darkGray" } } Text { id: textItem anchors.centerIn: parent font.pointSize: 20 color: "white" } MouseArea { property bool ent: false id: moousearea anchors.fill: parent onEntered: { ent = true } onExited: { ent = false effect.angle = 0.0 } hoverEnabled: true } } ShaderEffectItem { id: effect property variant source: ShaderEffectSource { sourceItem: but; hideSource: true } anchors.fill: but property real angle : 0.0 PropertyAnimation on angle { id: prop1 to: 360.0 duration: 800 loops: Animation.Infinite running: moousearea.ent } fragmentShader: " varying highp vec2 qt_TexCoord0; uniform lowp sampler2D source; uniform highp float angle; void main() { highp float wave = 0.02; highp float wave_x = qt_TexCoord0.x + wave * sin( radians( angle + qt_TexCoord0.x * 360.0 ) ); highp float wave_y = qt_TexCoord0.y + wave * sin( radians( angle + qt_TexCoord0.y * 360.0 ) ); highp vec4 texpixel = texture2D( source, vec2( wave_x, wave_y ) ); gl_FragColor = texpixel; }" } }
рдЦреИрд░, menu.qml рдлрд╝рд╛рдЗрд▓ рд╣реА
import QtQuick 1.0 import Qt.labs.shaders 1.0 Item { width: 150 height: 190 Column { anchors.horizontalCenter: parent.horizontalCenter Button { text: "Apple" } Button { text: "Red" } Button { text: "Green" } Button { text: "Blue" } } }
рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐
onExited
рдШрдЯрдирд╛ рдореЗрдВ
effect
рддрддреНрд╡ рдХреА рдХреЛрдг
angle
рд╕рдВрдкрддреНрддрд┐ рдХреЛ 0.0 рдореЗрдВ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдкрдбрд╝реЛрд╕реА рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдЧрдгрдирд╛ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХреЛрдг рдХреЛ 0 рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЕрдВрддрд┐рдо рдорд╛рди рд╕реЗ рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬреЛ рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо рдпрд╣ рдкреНрд░рднрд╛рд╡ рд╣реИ:
рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз
рд╣реИредрдЙрджрд╛рд╣рд░рдг 3. рдорд╛рдЙрд╕ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреБрдЫ рдмрдирд╛рд╡рдЯ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
рдЕрдЧрд▓рд╛, рдореИрдВ рдЫрд╡рд┐ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рдкрд┐рдХреНрд╕рд▓ рдХреЗ рд░рдВрдЧ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдХреНрд╖реЗрддреНрд░ рдорд╛рдЙрд╕ рдкреЙрдЗрдВрдЯрд░ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрдЧрд╛, рдЬреЛ 50 рдкрд┐рдХреНрд╕рд▓ рдХреЗ рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рд╕рд╛рде рд╕рд░реНрдХрд▓ рдХрд╛ рдХреЗрдВрджреНрд░ рд╣реЛрдЧрд╛ред рдФрд░ рдЗрд╕ рд╕рд░реНрдХрд▓ рдореЗрдВ рдореВрд▓ рд╕реЗ рдЕрд▓рдЧ рдкрд┐рдХреНрд╕реЗрд▓ рд░рдВрдЧ рд╣реЛрдВрдЧреЗред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЖрдкрдХреЛ
ShaderEffectItem
рддрддреНрд╡ рдореЗрдВ 3 рдЧреБрдгреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
property real xPos: 65.0
property real yPos: 65.0
property real radius: 50
рд╡реЗ рдХреНрд░рдорд╢рдГ рдореВрдбрд░ рдХреЛрдб рдФрд░ рд╕рд░реНрдХрд▓ рдХреЗ рддреНрд░рд┐рдЬреНрдпрд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдорд╛рдЙрд╕ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдВрдЧреЗред рдорд╛рдЙрд╕ рдЖрдВрджреЛрд▓рди рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
MouseArea
рддрддреНрд╡ рдФрд░
onPositionChanged
рдЗрд╡реЗрдВрдЯ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ
onPositionChanged
ред рдиреАрдЪреЗ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реИ рдФрд░ рдЖрдЧреЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ:
Rectangle { width: img.width height: img.height Image { id: img source: "images/nature.jpg" } ShaderEffectItem { id: effect anchors.fill: parent MouseArea { id: coords anchors.fill: parent onPositionChanged: { effect.xPos = mouse.x effect.yPos = coords.height - mouse.y } } property real xPos: 65.0 property real yPos: 65.0 property real radius: 50 property int widthImage: img.width property int heightImage: img.height property variant source: ShaderEffectSource { sourceItem: img; hideSource: true } fragmentShader: "varying highp vec2 qt_TexCoord0; uniform highp float xPos; uniform highp float yPos; uniform highp float radius; uniform highp int widthImage; uniform highp int heightImage; highp vec2 pixcoords = qt_TexCoord0.st * vec2( widthImage, heightImage ); uniform sampler2D source; void main(void) { lowp vec4 texColor = texture2D(source, qt_TexCoord0.st); lowp float gray = dot( texColor, vec4( 0.6, 0.5, 0.1, 0.0 ) ); if ( ( pow( ( xPos - pixcoords.x ), 2 ) + pow( ( yPos - pixcoords.y ), 2 ) ) < pow( radius, 2 ) ) { gl_FragColor = vec4( gray, gray, gray, texColor.a) ; } else { gl_FragColor = texture2D( source, qt_TexCoord0 ); } }" } }
рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреЙрд╡ рд╕реНрдХреНрд╡реЗрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдпрд╣ рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рд╕реА / рд╕реА ++ рдореЗрдВ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ) рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ (
pixcoords.x; pixcoords.y
) рдХреЗ рд╕рд╛рде рджрд┐рдП рдЧрдП рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рдПрдХ рдмрд┐рдВрджреБ рдПрдХ рд╕рд░реНрдХрд▓ рдХреЗ рд╕рд╛рде
pixcoords.x; pixcoords.y
рдХреЗрдВрджреНрд░ рдореЗрдВ
yPos
рдФрд░
yPos
рдФрд░ рддреНрд░рд┐рдЬреНрдпрд╛
radius
ред
рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рд╕рдордиреНрд╡рдп рд╣рдорд╛рд░реЗ рд╕рд░реНрдХрд▓ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдЧреНрд░реЗ рд░рдВрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ рд╕реНрдХреЗрд▓рд░рд▓реА рд╣реИ (
dot
рдлрд╝рдВрдХреНрд╢рди рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж рдХрд░рддрд╛ рд╣реИ)ред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд┐рдХреНрд╕реЗрд▓ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рдлрд┐рд░, рдЖрдк рдпрд╣ рдиреЛрдЯрд┐рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЪрд░ QML рддрддреНрд╡ рд╢реИрдбрд░ рдЪрд░ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ - рдЙрдирдХрд╛ рдПрдХ рд╣реА рдирд╛рдо рдФрд░ рд╕рдорддреБрд▓реНрдп рдкреНрд░рдХрд╛рд░ рд╣реИ:
real
highp float
рдмрд░рд╛рдмрд░ рд╣реИред
рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╣рдо рд╕рд╢рд░реНрдд рд╕рдВрдЪрд╛рд▓рдХреЛрдВ (рд╕реА рдХреЗ рд╕рдорд╛рди рд╣реА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз
рд╣реИредрдЙрджрд╛рд╣рд░рдг 4. рджреЛ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдирд╛ (рдмрдирд╛рд╡рдЯ)
рдЖрдЗрдП рд╣рдо рджреЛ рддрд╕реНрд╡реАрд░реЗрдВ:
рдХреЙрдлреА рдордЧ

рдФрд░ рдХреЙрдлреА рдмреАрдиреНрд╕:

рд╣рдо рдХреЙрдлреА рдмреАрдиреНрд╕ рдФрд░ рдЙрд╕ рдкрд░ рдХреЙрдлреА рдордЧ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкреГрд╖реНрдарднреВрдорд┐ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
texture1
рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ
texture1
рдореЗрдВ рджреЛ рдЪрд┐рддреНрд░
texture0
рдФрд░
ShaderEffectItem
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЯреБрдХрдбрд╝рд╛ shader рдХреЛрдб рдореЗрдВ, рдЗрди рджреЛ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ
uniform sampler2D texture0
рдмрдирд╛рд╡рдЯ
uniform sampler2D texture0
рдФрд░
uniform sampler2D texture1
рдмрдирд╛рд╡рдЯ 1 рдореЗрдВ рджреЛ рдмрдирд╛рд╡рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЪрд░реЛрдВ рдореЗрдВ s1
рдФрд░ s2
рд╣рдореЗрдВ рдХреНрд░рдорд╢рдГ рдкрд╣рд▓реЗ рдЪрд┐рддреНрд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдорд┐рд▓рддреЗ рд╣реИрдВ рдФрд░ рджреВрд╕рд░реЗ, рдХреНрд░рдорд╢рдГ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: import QtQuick 1.0 import Qt.labs.shaders 1.0 Rectangle { width: coffee.width height: coffee.height Image { id: coffee source: "images/coffee.jpg" } Image { id: granules source: "images/granules.jpg" } ShaderEffectItem { anchors.fill: parent id: effect property variant texture0: ShaderEffectSource { sourceItem: coffee; hideSource: true } property variant texture1: ShaderEffectSource { sourceItem: granules; hideSource: true } fragmentShader: " varying highp vec2 qt_TexCoord0; uniform sampler2D texture0; uniform sampler2D texture1; void main(void) { vec4 s1 = texture2D( texture0, qt_TexCoord0.st ); vec4 s2 = texture2D( texture1, qt_TexCoord0.st ) ; gl_FragColor = mix( vec4( s1.r, s1.g, s1.b, 1.0 ), vec4( s2.r * 0.6, s2.g * 0.6, s2.b * 0.6, 0.4 ), 0.35 ); }" } }
gl_FrontColor
рдкрд┐рдХреНрд╕реЗрд▓ рд░рдВрдЧ рдорд╛рдкрджрдВрдбреЛрдВ рд╡рд╛рд▓реЗ рджреЛ рд╡реИрдХреНрдЯрд░ рдХреЗ рд░реИрдЦрд┐рдХ рдкреНрд░рдХреНрд╖реЗрдк рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкрд░рд┐рдгрд╛рдореА рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ , рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рд▓рд┐рдП (рдврд╛рд▓ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди) рдкрд░рд┐рдЪрд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, s2 рдмрдирд╛рд╡рдЯ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд░рдВрдЧ рдЪреИрдирд▓ (рдХреЙрдлреА рдмреАрдиреНрд╕ рдХреЛ 0.6 рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдкрд░рд┐рдгрд╛рдо рд╣реИ: рдпрд╣рд╛рдВ рдЖрдк
рдорд┐рдХреНрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рд╡реИрдХреНрдЯрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЪреМрдерд╛ рддрддреНрд╡ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░, рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ 1.0 рдФрд░ 0.4) рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ, рджрд┐рд▓рдЪрд╕реНрдк рдорд┐рд╢реНрд░рд┐рдд рдмрдирд╛рд╡рдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВредрд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИредрдЕрдВрдд рдореЗрдВ, рдореИрдВ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рддреБрдЪреНрдЫ рд╣реИрдВ, рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рдУрд░, рд╡реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рд╡рд┐рд╖рдп рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВредрдирд┐рд╖реНрдХрд░реНрд╖
рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ shader рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдХрд╛рд░рдг, QML рддрддреНрд╡реЛрдВ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рддреЗ рд╕рдордп OpenGL рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдмрд╣реБрдд рд▓рдЪреАрд▓реЗ рддрдВрддреНрд░ рдорд┐рд▓рддреЗ рд╣реИрдВред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЬреАрдПрд▓рдПрд╕рдПрд▓ рднрд╛рд╖рд╛, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕реА рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдорддрднреЗрдж рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдИ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рд╣реИрдВ (рдбреЗрдЯрд╛ рдХреЛ рдорд╛рди рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдЖрдк рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрджрд┐ред рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЦрд░рд╛рдм рдпрд╛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╢реЗрдбрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрди рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдХрд╛рдо рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рд╕рд┐рдореНрдмрд┐рдпрди ^ 3, рдореИрдореЛ 5, рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕, рд╡рд┐рдВрдбреЛрдЬ 7 рдФрд░ рдЙрдмрдВрдЯреВред рдордВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╕реНрд╡рдпрдВ Qt SDK 4.7.x рд╕рдВрд╕реНрдХрд░рдг рдФрд░ QtOpenGL рд╕рдорд░реНрдерди рд╣реИрдВредQML рдХрд╛ рднрд╛рд╡реА рд╕рдВрд╕реНрдХрд░рдг - QML2 рдЗрд╕рдХреЗ рджреГрд╢реНрдп рдЧреНрд░рд╛рдлрд╝ рдореЗрдВ API рдХреЛ QML рдХреЛрдб рдХреЗ рд╕рд╛рде GL / GLES рд╢реЗрдб рдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдЧрд╛ред рдЖрдк рдХреНрдпреВрдЯреА 5.0 рдореЗрдВ рддрддреНрд╡ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВShaderEffect ред рдпрджрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВрдиреЗ рдЬреЛ рдХреБрдЫ рдКрдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ, рдЙрд╕рдореЗрдВ рдХреБрдЫ рд╕рдорд╛рдирддрд╛ рд╣реИредрдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ