QML рдореЗрдВ OpenGL рд╢реЗрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдпрд╣ рдкреЛрд╕реНрдЯ "рд╕реНрдорд╛рд░реНрдЯ рдлреЛрди рдлреЙрд░ рд╕реНрдорд╛рд░реНрдЯ рдкреЛрд╕реНрдЯ" рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрддреА рд╣реИ

рдпрд╣ рдкреЛрд╕реНрдЯ рдШреЛрд╖рдгрд╛рддреНрдордХ 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 ред рдпрджрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВрдиреЗ рдЬреЛ рдХреБрдЫ рдКрдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ, рдЙрд╕рдореЗрдВ рдХреБрдЫ рд╕рдорд╛рдирддрд╛ рд╣реИред

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ

Source: https://habr.com/ru/post/In133828/


All Articles