WPF рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдореЛрд╢рди рдХрд▓рдВрдХ рдкреНрд░рднрд╛рд╡ рдЬреЛрдбрд╝реЗрдВ


рд╣реЗрд▓реЛ, рд╣реЗрдмреНрд░!
рд╣рдо рд╕рднреА рдиреЗ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреЛ рдХрдИ рдмрд╛рд░ рд╕реБрдирд╛ рд╣реИ рдХрд┐ 24 рдлреНрд░реЗрдо рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рдореВрд▓реНрдп рд╣реИ рдЬрд┐рд╕реЗ рдорд╛рдирд╡ рджреГрд╖реНрдЯрд┐ рдЕрдиреБрднрд╡ рдХрд░ рд╕рдХрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдлреНрд░реЗрдо рджреНрд╡рд╛рд░рд╛ рд╡реАрдбрд┐рдпреЛ рдХреЛ рдЧрддрд┐ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджрд░реНрд╢рдХ рдХреЗ рдЕрд╡рдЪреЗрддрди рдореЗрдВ рдХрд┐рд╕реА рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╣рдо рд╕рднреА, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИ ред рдбрд┐рдЬрд┐рдЯрд▓ рдХреИрдорд░реЛрдВ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдлреЛрдЯреЛрдбрд╛рдпреЛрдбреНрд╕ рдХреА рддрд░рд╣, рд░реЗрдЯрд┐рдирд╛ рдиреНрдпреВрд░реЙрдиреНрд╕ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмрд┐рдВрджреБ рдкрд░ рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рд░реЛрд╢рдиреА рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдереЛрдбрд╝реЗ рд╕рдордп рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд▓рд┐рдП рдХреБрд▓ рдЪрдордХрджрд╛рд░ рдкреНрд░рд╡рд╛рд╣, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рддреЗрдЬреА рд╕реЗ рдмрдврд╝рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдПрдВ рд╣рдореЗрдВ "рдзреБрдВрдзрд▓рд╛" рд▓рдЧрддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░рд╛ рдорд╕реНрддрд┐рд╖реНрдХ рдЗрд╕ рддрд░рд╣ рдХреА рджреГрд╖реНрдЯрд┐ рдХреЗ рдЖрджреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рд╡реНрдпрдХреНрддрд┐рдЧрдд рддрд╕реНрд╡реАрд░реЛрдВ рд╕реЗ рдмрдирд╛ рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдкреНрд░рд╛рдХреГрддрд┐рдХ рд▓рдЧрддрд╛ рд╣реИред рд╡рд╣реА рдХрдВрдкреНрдпреВрдЯрд░ рдПрдиреАрдореЗрд╢рди рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИред рдПрдиреАрдореЗрд╢рди рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдиреЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЕрдкрдиреЗ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рдкреАрдЫреЗ рдзреБрдВрдзрд▓реА рдЧрд╛рдбрд╝рд┐рдпреЛрдВ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдирд╛ рд╕реАрдЦрд╛ рд╣реИ - рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ "рдореЛрд╢рди рдмреНрд▓рд░" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ 2 рдбреА- рдФрд░ 3 рдбреА-рдПрдиреАрдореЗрд╢рди рдХреЗ рд╕рднреА рдЖрдзреБрдирд┐рдХ рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред рд▓реЗрдХрд┐рди рд╕рд╛рдзрд╛рд░рдг рдбреЗрд╕реНрдХрдЯреЙрдк рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдкреЙрдк-рдЕрдк рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рдкрд░ рдореИрдВ рдПрдХ рдЙрддреНрддрд░рджрд╛рдпреА рдкреНрд░рднрд╛рд╡ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ WPF рдЖрд╡реЗрджрди рдореЗрдВ рдореЛрд╢рди рдмреНрд▓рд░ рдХреЛ рдХреИрд╕реЗ рдЦрд░рд╛рдм рдХрд░ рджрд┐рдпрд╛ред

рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдореИрдВ рджреЛ рддрд╕реНрд╡реАрд░реЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред рдЙрдирдореЗрдВ рдлрд╝реНрд░реЗрдореЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рдорд╛рди рд╣реИред
рдирд┐рдпрдорд┐рдд рдПрдиреАрдореЗрд╢рдирдореЛрд╢рди рдмреНрд▓рд░
рдореЛрд╢рди рдмреНрд▓рд░ рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рдВрдбреЛ
рдореЛрд╢рди рдмреНрд▓рд░ рдХреЗ рд╕рд╛рде рд╡рд┐рдВрдбреЛ

рдпрджрд┐ рдЖрдк рдЕрдВрддрд░ рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВрдиреЗ рдХрдИ рд╢рд╛рдореЗрдВ рдмрд░реНрдмрд╛рдж рдХреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЕрдВрддрд░ рдЕрднреА рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ :)

рдФрд░ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдлреНрд░реЗрдо-рдмрд╛рдп-рдлреНрд░реЗрдо рд╕реНрдХреИрди рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИ:
рдирд┐рдпрдорд┐рдд рдПрдиреАрдореЗрд╢рди
рдореЛрд╢рди рдмреНрд▓рд░

рдПрдХ рдЪреМрдХрд╕ рдкрд╛рдардХ рдиреЗ рд╢рд╛рдпрдж рджреЗрдЦрд╛ рдХрд┐ рдиреАрдЪреЗ рдХреА рдкрдВрдХреНрддрд┐ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдореЗрдВ рдкрдВрджреНрд░рд╣ рдкрд╛рд░рднрд╛рд╕реА рдЪрд┐рддреНрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдПрдХ-рджреВрд╕рд░реЗ рдкрд░ рдЖрд░реЛрдкрд┐рдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рдереЛрдбрд╝рд╛ рд╕рд╛ рдЦрд┐рдВрдЪрд╛рд╡ рдХреЗ рд╕рд╛рде, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдПрдлрдкреАрдПрд╕ рдХреЛ 15 рдЧреБрдирд╛ рдмрдврд╝рд╛ рджрд┐рдпрд╛ рд╣реИред рдПрдХ рдЪреБрдЯрдХреБрд▓рд╛ред

рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ?

рдкрд┐рдХреНрд╕реЗрд▓ рд╢реЗрдбреНрд╕

рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЖрдзреБрдирд┐рдХ рдХреЗрдВрджреНрд░реАрдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рднреА рдПрдХ рдЧреИрд░-рдмреНрд░реЗрдХрд┐рдВрдЧ рдореЛрд╢рди рдХрд▓рдВрдХ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдзреБрдВрдзрд▓реА "рдЯреНрд░реЗрд╕" рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рдиреЗ рдореЗрдВ рдЬреАрдкреАрдпреВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИред WPF рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рд╢реЗрдбреНрд╕ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рджреГрд╢реНрдп рддрддреНрд╡реЛрдВ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рднрд╛рд╡ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЫрд╛рдпрд╛, рд╡рд┐рд░реВрдкрдг рдкреНрд░рднрд╛рд╡ (рдЧреНрд▓рд╛рд╕, рдШреБрдорд╛, рд▓рд╣рд░), рд░рдВрдЧ рд╕рдВрддреБрд▓рди рдмрджрд▓рдирд╛, рдзреБрдВрдзрд▓рд╛ рд╣реЛрдирд╛ рдЖрджрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢реЗрдб рдХреБрдЫ рднрдпрд╛рдирдХ рдФрд░ рдЬрдЯрд┐рд▓ рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрдкрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВред рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рддрдХ, рдореБрдЭреЗ рдпрдХреАрди рдерд╛ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдЬреАрд╡рди рдореЗрдВ рдЙрдирдХрд╛ рд╕рд╛рдордирд╛ рдХрднреА рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдЬрдм рддрдХ рдХрд┐ рдореИрдВ рдЦреЗрд▓-рджреЗрд╡ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╡реЗ рд▓рд╛рдЧреВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, shaders рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЬрд╛рдирдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕реЗ GLSL , HLSL , рдЖрджрд┐ред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╢реЗрдбреНрд╕ рдХреЗ рдХрдИ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдореИрдВрдиреЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕реЗ ZoomBlurEffect рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореБрдлреНрдд Shazzam Shader рд╕рдВрдкрд╛рджрдХ рдХреЗ рд▓рд┐рдП рдбреЗрдореЛ рд╢реЗрдбрд░реНрд╕ рдХреА рдЖрдкреВрд░реНрддрд┐ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣рд╛рдБ рдЙрд╕рдХрд╛ рдХреЛрдб рд╣реИ:

ZoomBlurEffect.fx
/// <class>ZoomBlurEffect</class> /// <description>An effect that applies a radial blur to the input.</description> sampler2D inputSource : register(S0); /// <summary>The center of the blur.</summary> float2 Center : register(C0); /// <summary>The amount of blur.</summary> float BlurAmount : register(C1); float4 main(float2 uv : TEXCOORD) : COLOR { float4 c = 0; uv -= Center; for (int i = 0; i < 15; i++) { float scale = 1.0 + BlurAmount * (i / 14.0); c += tex2D(inputSource, uv * scale + Center); } c /= 15; return c; } 


рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдЪрдПрд▓рдПрд╕рдПрд▓ рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд┐рдирд╛, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╢реЗрдбрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ: рдЕрдВрддрд┐рдо рдЫрд╡рд┐ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдмрд┐рдВрджреБ рдФрд░ C0 рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдзрдмреНрдмрд╛ рдХреЗрдВрджреНрд░ рдХреЗ рдмреАрдЪ рдХреА рд░реЗрдЦрд╛ рдкрд░ рд╕реНрдерд┐рдд 15 рдЕрдВрдХреЛрдВ рдХреЗ рдФрд╕рдд рд░рдВрдЧ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕ рдмрд┐рдВрджреБ рд╕реЗ рдФрд╕рдд рдЕрдВрдХреЛрдВ рдХреА рджреВрд░реА рдХреЛ C1 рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд BlurAmount рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЫрд╡рд┐ рдХреЗ рдХреЗрдВрджреНрд░ рд╕реЗ рдзреБрдВрдзрд▓рд╛ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП C0 (0.5; 0.5) рд╣реИ, рдФрд░ BlurAmount рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдореВрд▓реНрдп рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдлреНрд░реЗрдо рдкрд┐рдЫрд▓реЗ рдПрдХ рд╕реЗ рдХрд┐рддрдирд╛ рдЕрд▓рдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХред
рдмреЗрд╢рдХ, рдЖрдк рдЗрд╕ рд░реВрдк рдореЗрдВ shader рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЖрдкрдХреЛ рдЗрд╕реЗ fxc.exe рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ DirectX SDK рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдкрд┐рдХреНрд╕реЗрд▓ рд╢реЗрдбрд░ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХреНрд╕рдЯреЗрдВрд╢рди ".ps" рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдорд╛рд░реЗ WPF рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдПрдХ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ ZoomBlurEffect рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдБ:

ZoomBlurEffect.cs
  /// <summary>An effect that applies a radial blur to the input.</summary> public class ZoomBlurEffect : ShaderEffect { public static readonly DependencyProperty InputProperty = RegisterPixelShaderSamplerProperty("Input", typeof (ZoomBlurEffect), 0); public static readonly DependencyProperty CenterProperty = DependencyProperty.Register("Center", typeof (Point), typeof (ZoomBlurEffect), new UIPropertyMetadata(new Point(0.9D, 0.6D), PixelShaderConstantCallback(0))); public static readonly DependencyProperty BlurAmountProperty = DependencyProperty.Register("BlurAmount", typeof (double), typeof (ZoomBlurEffect), new UIPropertyMetadata(0.1D, PixelShaderConstantCallback(1))); public ZoomBlurEffect() { PixelShader = new PixelShader { UriSource = new Uri(@"pack://application:,,,/ZoomBlurEffect.ps", UriKind.Absolute) }; UpdateShaderValue(InputProperty); UpdateShaderValue(CenterProperty); UpdateShaderValue(BlurAmountProperty); } public Brush Input { get { return ((Brush) (GetValue(InputProperty))); } set { SetValue(InputProperty, value); } } /// <summary>The center of the blur.</summary> public Point Center { get { return ((Point) (GetValue(CenterProperty))); } set { SetValue(CenterProperty, value); } } /// <summary>The amount of blur.</summary> public double BlurAmount { get { return ((double) (GetValue(BlurAmountProperty))); } set { SetValue(BlurAmountProperty, value); } } } 

(рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, Shazzam Shader рд╕рдВрдкрд╛рджрдХ рд╣реА shaders рдХреЗ рд▓рд┐рдП рдРрд╕реЗ рдЖрд╡рд░рдг рд╡рд░реНрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛)ред

рд╡рд┐рдВрдбреЛ рдПрдиреАрдореЗрд╢рди

рдХрд┐рд╕реА рднреА рджреГрд╢реНрдп рддрддреНрд╡ рдореЗрдВ рдПрдХ RenderTransform рдЧреБрдг рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╕рдмрд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдЙрд╕рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рддрддреНрд╡ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рд╕реНрдХреЗрд▓рд┐рдВрдЧ, рд░реЛрдЯреЗрд╢рди рдФрд░ рдЭреБрдХрд╛рд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рд╡рд┐рдВрдбреЛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдкреИрдорд╛рдиреЗ рдХреЛ рд╢реВрдиреНрдп рд╕реЗ рдмрджрд▓ рджреЗрдВрдЧреЗ (рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдХ рдмрд┐рдВрджреБ рддрдХ "рдиреНрдпреВрдирддрдо" рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) (рд╕рд╛рдордЧреНрд░реА рдкреВрд░реА рд╡рд┐рдВрдбреЛ рддрдХ рдЦрд┐рдВрдЪ рдЬрд╛рддреА рд╣реИ)ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЦрд┐рдбрд╝рдХреА рдореЗрдВ рдПрдХ рдкрд╛рд░рджрд░реНрд╢реА рдкреГрд╖реНрдарднреВрдорд┐ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрд░реЛрдо (рдПрдХ рд╢реАрд░реНрд╖рдХ рдХреЗ рд╕рд╛рде рдПрдХ рдлреНрд░реЗрдо) рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдЕрдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИред
WPF рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдПрдиреАрдореЗрд╢рди рдХреЗ рд▓рд┐рдП рддрдерд╛рдХрдерд┐рдд "рд╕реНрдореВрдерд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рдВрд╕" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд▓реЗрдЦрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдИрдЬрд╝реАрдВрдЧрдлрдВрдХреНрд╢рдирдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ ред
рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд▓рд╛рд╕реНрдЯрд┐рдХрдПрдЬрд╝ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдЦрд┐рдбрд╝рдХреА рдХреЛ "рдЬрд╛рд░реА рд╡рд╕рдВрдд" рдкреНрд░рднрд╛рд╡ рджреЗрддрд╛ рд╣реИ - рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рдПрдХ рдЖрдХрд╛рд░ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдлреИрд▓рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдерд╛рдкрд┐рдд рд▓реЛрдЧреЛрдВ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдореЛрд╢рди рдмреНрд▓рд░ рдкреНрд░рднрд╛рд╡ рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рдВрдбреЛ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдПрдирд┐рдореЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫрджреНрдо рдХреЛрдб
 double t = 0.0; int  = ; while (t < 1.0) { (ElasticEase(t)); t = ( - ) / ; } (1.0); 


рдпрд╣рд╛рдБ t 0 рд╕реЗ 1 рддрдХ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ 0 рд╡рд╣ рдХреНрд╖рдг рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕ рджрд┐рди рдПрдиреАрдореЗрд╢рди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ 1 рд╡рд╣ рдХреНрд╖рдг рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╡рд╣ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред ElasticEase (t) рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдорд╛рди рдЗрд╕ рдХрд╛рдиреВрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓рдЧрднрдЧ рдмрджрд▓рддрд╛ рд╣реИ:


рдЧрддрд┐-рдзреБрдВрдзрд▓рд╛ рдХреЛ рд╣рдорд╛рд░реЗ рдПрдиреАрдореЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдВрдбреЛ рдХреЗ рдЪрд╛рдЗрд▓реНрдб рдХрдВрдЯреНрд░реЛрд▓ рдХреА рдЗрдлреЗрдХреНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
 content.Effect = new ZoomBlurEffect { Center = new Point(0.5, 0.5) }; 

рдореЛрд╢рди рдмреНрд▓рд░ рдПрдирд┐рдореЗрд╢рди рд╕реНрдпреВрдбреЛрдХреЛрдб
 double t = 0.0; double prevEase = 0.0; int  = ; (new ZoomBlurEffect { Center = new Point(0.5, 0.5) }); while (t < 1.0) { var ease = ElasticEase(t); (ease); content.Effect.BlurAmount = ease - prevEase; prevEase = ease; t = ( - ) / ; } (1.0); (null); 


рдЗрд╕ рдХреЛрдб рдФрд░ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рд╣рдо BlurAmount рдорд╛рди рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ ElasticEase рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд░реНрддрдорд╛рди рдорд╛рди рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдХреЗ рдорд╛рди рд╕реЗ рдХрд┐рддрдирд╛ рднрд┐рдиреНрди рд╣реИред рдПрдиреАрдореЗрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдЬрд▓реНрджреА рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИ, BlurAmount рдХрд╛рдлреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЦрд┐рдбрд╝рдХреА рдХрд╛ "рдзреБрдВрдзрд▓рд╛" рдмрдбрд╝рд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, BlurAmount рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ "рдзреБрдВрдзрд▓рд╛" рд▓рдЧрднрдЧ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред

рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, WPF рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдореЛрд╢рди рдмреНрд▓рд░ рдкреНрд░рднрд╛рд╡ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред рдпрд╣рд╛рдБ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣реИрдВ:


рдирд┐рд╖реНрдХрд░реНрд╖

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВрдиреЗ рдХрднреА рднреА рдореЛрд╢рди рдмреНрд▓рд░ рдЗрдлреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрддреНрдкрд╛рджрди рдХреЛрдб рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╢рд╛рдпрдж рд╣реА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рдирд╕реЗ рдореБрдЭреЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдирд╛ рд╣реИ, рдЖрддреНрдорд╛ рдХреЗ рд▓рд┐рдПред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдХрд┐рд╕реА рдХреЗ рдХрд╛рдо рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреАред

рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдпрд╣рд╛рдБ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ: github.com/misupov/motion-blur

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


All Articles