рдореБрдЭреЗ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИ, рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд╡рд░реНрдзрд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдореЗрдВ рдЖрдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ Habr├й рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдЦрд╛ рд╣реИ, рдФрд░ рдХрд╛рдлреА рдмреНрд▓реЙрдЧ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдореИрдВ рдереЛрдбрд╝рд╛ рджреЛрд╣рд░рд╛рдирд╛ рд╣реЛрдЧрд╛ред рд╕рдВрд╡рд░реНрдзрд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдХрд╛ рдмрд╣реБрдд рд╡рд┐рдЪрд╛рд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЕрд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╣рд╛рде рдкрд┐рдХреНрд╕реЗрд▓ рд╢реЗрдбреНрд╕ рдХреЗ рдЕрдзреНрдпрдпрди рддрдХ рдкрд╣реБрдВрдЪреЗред рдЗрд╕реЗ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЧрдпрд╛ред
рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░реЗрдВ:
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, SLARToolkit рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ ред
рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ 3 рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдорд╛рд░реНрдХрд░ рд╣реИрдВред рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдорд╛рд░реНрдХрд░ рдмрдирд╛рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдкрд░реНрдпрд╛рдкреНрдд рддреИрдпрд╛рд░-рддреИрдпрд╛рд░ рд╣реИрдВред
рдЕрдм рдПрдХ рдирдпрд╛ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рд╕рдВрдЧреНрд░рд╣ рд╕реЗ SLARTooklit.dll рдФрд░ Matrix3DEx.dll рдХреЗ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВред
рдпрд╣рд╛рдБ рдореЗрд░реЗ рд░рд┐рдХреНрдд рдХрд╛ XAML рдорд╛рд░реНрдХрдЕрдк рд╣реИ
<UserControl x: Class = "SilverlightForHabr.MainPage" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/pretation" xmlns: x = "http://schemas.microsoft.com/winfx/2006 / xaml "xmlns: d =" http://schemas.microsoft.com/expression/blend/2008 "xmlns: mc =" http://schemas.openxmlformats.org/markup-compatibility/2006 "mc: Ignorable =" d "d: DesignHeight =" 550 "d: DesignWidth =" 700 "> <рдЧреНрд░рд┐рдб x: рдирд╛рдо =" рд▓реЗрдЖрдЙрдЯрд░реВрдЯ "рдкреГрд╖реНрдарднреВрдорд┐ =" рд╡реНрд╣рд╛рдЗрдЯ "> <рд╕реНрдЯреИрдХрдкреИрдирд▓> <рдЯреЗрдХреНрд╕реНрдЯрдмреИрдХ рдЯреЗрдХреНрд╕реНрдЯ =" рд╕рд┐рд▓реНрд╡рд░ + рдСрдЧрдореЗрдВрдЯреЗрдб рд░рд┐рдпрд▓рд┐рдЯреА + рд╢реЗрдбреНрд╕ "рд╣реЙрд░рд┐рдЬрд╝реЙрдиреНрдЯрд▓ рдПрд▓рд╛рдЗрдЧрдореЗрдВрдЯ =" рдХреЗрдВрджреНрд░ "/> <рдЧреНрд░рд┐рдб рдЪреМрдбрд╝рд╛рдИ =" 640 "рдКрдБрдЪрд╛рдИ =" 480 "> <рдЖрдпрдд рдирд╛рдо =" рд╡реНрдпреВрдкреЛрд░реНрдЯ "рд╕реНрдЯреНрд░реЛрдХ =" рдХрд╛рд▓рд╛ "рд╕реНрдЯреНрд░реЛрдХ" = 2 "/> <рдХреИрдирд╡рд╛рд╕> <рдЫрд╡рд┐ =" рд▓реЛрдЧреЛ "рд╕реНрд░реЛрдд =" habr .png "рдЪреМрдбрд╝рд╛рдИ =" 300 "рдКрдБрдЪрд╛рдИ =" 300 "/> </ рдХреИрдирд╡рд╛рд╕> </ рдЧреНрд░рд┐рдб> <рдмрдЯрди рд╕рд╛рдордЧреНрд░реА =" рдЪрд▓реЛ рд╢реБрд░реВ рдХрд░реЗрдВ "рдкреИрдбрд┐рдВрдЧ =" 5 "рдорд╛рд░реНрдЬрд┐рди =" 5 "рдХреНрд╖реИрддрд┐рдЬрддрд╛ =" рдХреЗрдВрджреНрд░ /> </ StackPanel > </ рдЧреНрд░рд┐рдб> </ UserControl>
рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдХреИрдорд░реЗ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреИрдорд░реЗ рд╕реЗ рдЫрд╡рд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрд╣ рдмрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
- рдХреИрдкреНрдЪрд░ рд╕реЛрд░реНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБ
- рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдХреИрдорд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд╛рдВрдЧрддреЗ рд╣реИрдВ
- рдЪрд┐рддреНрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ
рдХрд╣реАрдВ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, XAML рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдПрдХ рдмрдЯрди рдХреНрд▓рд┐рдХ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рд▓рд┐рдВрдХ:
рднрд░рд╛ рд╣реБрдЖ = "UserControl_Loaded"> рдФрд░ <рдмрдЯрди рдХрдВрдЯреЗрдВрдЯ = "рд▓реЗрдЯреНрд╕ рд╕реНрдЯрд╛рд░реНрдЯ" рдкреЗрдбрд┐рдВрдЧ = "5" рдорд╛рд░реНрдЬрд┐рди = "5" рд╣реЙрд░рд┐рдЬрд╝реЙрдиреНрдЯрд▓ рдПрд▓рд╛рдЗрдЧрдореЗрдВрдЯ = "рд╕реЗрдВрдЯрд░" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ = "рдСрдирд╕реНрдЯрд╛рд░реНрдЯрдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ" />
рдпрд╣ рд╕реНрд╡рдпрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ:
рдирд┐рдЬреА рд╢реВрдиреНрдп UserControl_Loaded (рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЗрд╖рдХ, RoutedEventArgs e) { рдХреИрдкреНрдЪрд░рд╕реЛрд░реНрд╕ = рдирдпрд╛ рдХреИрдкреНрдЪрд░ рд╕реНрд░реЛрдд (); CaptureSource.VideoCaptureDevice = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice (); // рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреИрдорд░реЗ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ var vidBrush = new VideoBrush (); vidBrush.SetSource (рдХреИрдкреНрдЪрд░рд╕реЛрд░реНрд╕); // рдмреНрд░рд╢ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрдорд░реЗ рд╕реЗ рд╡реАрдбрд┐рдпреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рд╡реНрдпреВрдкреЛрд░реНрдЯ.рдлрд┐рд▓ = рд╡рд┐рджрдмреНрд░рд╢; // рд╣рдорд╛рд░реА рдЖрдпрдд рдкрд░ рдмреНрд░рд╢ рдХреЗ рд╕рд╛рде рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВ } рдирд┐рдЬреА рд╢реВрдиреНрдп onStartBtnClick (рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЗрд╖рдХ, RoutedEventArgs e) { рдЕрдЧрд░ (рдХреИрдкреНрдЪрд░рдбреЗрд╡рд┐рд╕рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдиред рдЕрд╕реЗрдВрд╕рдЯрд┐рд╡рдбреЗрд╡рд┐рд╕рдПрдЯ ()) // рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдкреВрдЫреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреИрдорд░реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ { рдХреИрдкреНрдЪрд░ рд╕реЛрд░реНрд╕ред рдХрд╛рд░реНрдЯ (); // рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдЪрд▓реЗрдВ! } }
рдЕрдм рдХреИрдорд░реЗ рд╕реЗ рдЪрд┐рддреНрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред
рд╕рдВрд╡рд░реНрдзрд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛
рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- рд╣рдо рдХреИрдкреНрдЪрд░рд╕реЛрд░реНрд╕рдореИрдХрд░рдбреЗрдЯреЗрдЯрд░ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХреИрдорд░рд╛ рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рдорд╛рд░реНрдХрд░реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ
- рдХреБрдЫ рдорд┐рд▓ рдЬрд╛рдП, рддреЛ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдмреБрд▓рд╛рдУ
- рд╣рдо рдорд╛рд░реНрдХрд░ рдХреЗ рдкреНрд░рдХреНрд╖реЗрдкрдг рдореИрдЯреНрд░рд┐рдХреНрд╕ (рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╕реНрдерд┐рддрд┐) рдХреЛ рд╕реНрд╡рдпрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
- рд╣рдо рдЗрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдорд╛рд░реНрдХрд░ рдХреЗ рдКрдкрд░ рдУрд╡рд░рд▓реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
рдЗрди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХреЛрдб рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ:
рдирд┐рдЬреА рд╢реВрдиреНрдп UserControl_Loaded (рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЗрд╖рдХ, RoutedEventArgs e) { рдХреИрдкреНрдЪрд░рд╕реЛрд░реНрд╕ = рдирдпрд╛ рдХреИрдкреНрдЪрд░ рд╕реНрд░реЛрдд (); CaptureSource.VideoCaptureDevice = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice (); var vidBrush = new VideoBrush (); vidBrush.SetSource (рдХреИрдкреНрдЪрд░рд╕реЛрд░реНрд╕); рд╡реНрдпреВрдкреЛрд░реНрдЯ.рдлрд┐рд▓ = рд╡рд┐рджрдмреНрд░рд╢; arDetector = new CaptureSourceMarkerDetector (); var рдорд╛рд░реНрдХрд░ = Marker.LoadFromResource ("Marker_L_16x16seolution_80width.pat", 16, 16, 80); arDetector.Initialize (рдХреИрдкреНрдЪрд░рд╕реЛрд░реНрд╕, 1, 4000, рдорд╛рд░реНрдХрд░); arDetector.MarkersDetected + = (s, me) => { Dispatcher.BeginInvoke () => { var dr = me.DetectionResults; рдЕрдЧрд░ (dr.HasResults) { var centerAtOrigin = Matrix3DFactory.CreateTranslation (-Logo.ActualWidth * 0.5; -Logo.ActualHeight * 0.5, 0); var рд╕реНрдХреЗрд▓ = Matrix3DFactory.CreateScale (0.5, -0.5, 0.5); var рджреБрдирд┐рдпрд╛ = centerAtOrigin * рд╕реНрдХреЗрд▓ * рдбреЙ [0]ред var vp = Matrix3DFactory.CreateViewportTransformation (Viewport.ActualWidth, Viewport.ActualHeight); var m = Matrix3DFactory.CreateViewportProjection (рджреБрдирд┐рдпрд╛, Matrix3D.Identity, arDetector.Projection, vp); Logo.Projection = new Matrix3DProjection {ProjectionMatrix = m}; } }); }; }
рдФрд░ рд╣рд╛рдВ, рд╣рдо рдЕрдкрдиреЗ рдорд╛рд░реНрдХрд░ рдХреЛ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╣ Marker_L_16x16seolution_80width.pat рд╣реИред рдЕрдкрдиреА рдмрд┐рд▓реНрдб рдПрдХреНрд╢рди рдкреНрд░реЙрдкрд░реНрдЯреА рдореЗрдВ, рд╕рдВрд╕рд╛рдзрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред
рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдмрдЪреА рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЪреБрдиреЗ рд╣реБрдП рдорд╛рд░реНрдХрд░ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, SLARToolkit рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдореБрджреНрд░рдг рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдХрд░ рдХрд╛ рдПрдХ рдкреАрдбреАрдПрдл рд╕рдВрд╕реНрдХрд░рдг рд░рдЦрд╛ред
рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣реИрдмрд░ рдХрд╛ рд▓реЛрдЧреЛ рдорд╛рд░реНрдХрд░ рдХреЗ рдКрдкрд░ рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИред

рдЕрджреНрднреБрдд!
shaders
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдПрдХ рд╢реЗрдбрд░ рдПрдЪрдПрд▓рдПрд╕рдПрд▓ (рд╣рд╛рдИ рд▓реЗрд╡рд▓ рд╢реИрдбрд░ рд▓реИрдВрдЧреНрд╡реЗрдЬ) рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд░рдВрдЧ рдпрд╛ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИред
рдПрдЪрдПрд▓рдПрд╕рдПрд▓ рдПрдХ рд╕реА-рд▓рд╛рдЗрдХ рднрд╛рд╖рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдкрд┐рдХреНрд╕реЗрд▓ рд╢реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрд╢рд░реНрддреЗ рдХрд┐ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рддреНрд╡рд░рдг рд╕рдХреНрд╖рдо рд╣реЛ, рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЛрд░ рдкрд░ рд╢реЗрдбреНрд╕ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдХрдИ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИрдВ рдЬреЛ рд╢реЗрдбреНрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддреЗ рд╣реИрдВред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рд╢рд╛рдЬрд╝рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдЖрдпрд╛ред рдпрд╣ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдХрдИ рдЫрд╡рд┐рдпреЛрдВ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдкрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ C # рдпрд╛ VB рд╡рд░реНрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ shader рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рддреЛ, Shazzam рд╕рд╛рдЗрдЯ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред
рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдВред
рдореИрдВрдиреЗ рд░реЗрдбреАрдореЗрдб рдЬреВрдордмреНрд▓реВрд░ рд╢реЗрдбрд░ рдЪреБрдирд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд╕рднреА рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ рдЬрд┐рдирдХреА рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдмреНрд▓рд░ рдХреА рдбрд┐рдЧреНрд░реА рдФрд░ рд╡рд╣ рдмрд┐рдВрджреБ рдЬрд┐рд╕рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣рдо рдмреНрд▓рд░ рдХрд░реЗрдВрдЧреЗред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдмрд┐рдВрджреБ рдПрдХ рдорд╛рд░реНрдХрд░ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╢реЗрдбрд░ рдХреЛрдб
/// <class> ZoomBlurEffect </ class> /// <рд╡рд┐рд╡рд░рдг> рдПрдХ рдкреНрд░рднрд╛рд╡ рдЬреЛ рдЗрдирдкреБрдЯ рдкрд░ рдПрдХ рд░реЗрдбрд┐рдпрд▓ рдХрд▓рдВрдХ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред </ рд╡рд░реНрдгрди> // ------------------------------------------------ ----------------------------------------- // рд╢реЗрдбрд░ рдирд┐рд░рдВрддрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдореИрдкрд┐рдВрдЧ (рд╕реНрдХреЗрд▓рд░ - рдлреНрд▓реЛрдЯ, рдбрдмрд▓, рдкреЙрдЗрдВрдЯ, рдХрд▓рд░, рдкреЙрдЗрдВрдЯ 3 рдбреА, рдЖрджрд┐) // ------------------------------------------------ ----------------------------------------- /// <рд╕рд╛рд░рд╛рдВрд╢> рдзреБрдВрдзрд▓рд╛ рдХрд╛ рдХреЗрдВрджреНрд░ред </ рд╕рд╛рд░рд╛рдВрд╢> /// <minValue> 0 </ minValue> /// <maxValue> 0.2 </ maxValue> /// <defaultValue> 0.9,0.6 </ defaultValue> рдлреНрд▓реЛрдЯ 2 рдХреЗрдВрджреНрд░: рд░рдЬрд┐рд╕реНрдЯрд░ (C0); /// <рд╕рд╛рд░рд╛рдВрд╢> рдзреБрдВрдзрд▓рд╛ рдХреА рдорд╛рддреНрд░рд╛ред </ рд╕рд╛рд░рд╛рдВрд╢> /// <minValue> 0 </ minValue> /// <maxValue> 0.2 </ maxValue> /// <defaultValue> 0.1 </ defaultValue> рдлреНрд▓реЛрдЯ рдмреНрд▓рд░рдорд╛рдЙрдВрдЯ: рд░рдЬрд┐рд╕реНрдЯрд░ (C1); // ------------------------------------------------ -------------------------------------- // рд╕реИрдореНрдкрд▓рд░ рдЗрдирдкреБрдЯреНрд╕ (рдмреНрд░рд╢, рдЗрдореНрдкреНрд▓рд┐рд╕реЗрдВрдЯрдЗрдиреНрдкреБрдЯ рд╕рд╣рд┐рдд) // ------------------------------------------------ -------------------------------------- sampler2D inputSource: рд░рдЬрд┐рд╕реНрдЯрд░ (S0); // ------------------------------------------------ -------------------------------------- // рдкрд┐рдХреНрд╕реЗрд▓ рд╢реЗрдбрд░ // ------------------------------------------------ -------------------------------------- рдлреНрд▓реЛрдЯ 4 рдореЗрди (рдлреНрд▓реЛрдЯ 2 uv: TEXCOORD): рд░рдВрдЧ { рдлреНрд▓реЛрдЯ 4 рд╕реА = 0; uv - = рдХреЗрдВрджреНрд░; for (int i = 0; рдореИрдВ <15; i ++) { рдлреНрд▓реЛрдЯ рд╕реНрдХреЗрд▓ = 1.0 + рдмреНрд▓рд░рдЕрдорд╛рдЙрдВрдЯ * (i / 14.0); c + = tex2D (inputSource, uv * scale + Center); } рд╕реА / = 15; рд╡рд╛рдкрд╕реА c; }
Shazzam рдХрд╛ рдкрд░рд┐рдгрд╛рдо ZoomBlur.ps рдФрд░ ZoomBlurEffect.cs рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
рдкрд╣рд▓реА рдлрд╛рдЗрд▓ рд░реЗрдбреА-рдореЗрдб рд╢реЗрдбрд░ рд╣реИред рджреВрд╕рд░рд╛ рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдПрдХ shader рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддрд╛ рд╣реИред
рдПрдХ рдФрд░ рдмрдЯрди рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░рд╛ рд╢реЗрдбрд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛:
<рдмрдЯрди рд╕рд╛рдордЧреНрд░реА = "рд╢реЗрдбрд░ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ" рдирд╛рдо = "рд╢реЗрдбрд░реНрд╕рдмрдЯрди" рдкреИрдбрд┐рдВрдЧ = "5" рд╣реЙрд░рд┐рдЬрд╝реЙрдиреНрдЯрд▓ рдПрд▓рд╛рдЗрдЧрдореЗрдВрдЯ = "рдХреЗрдВрджреНрд░" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ = "рд╕реНрд╡рд┐рдЪрдСрдирд╢реАрдЯрд░реНрд╕" />
рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝реЗрдВ:
рдирд┐рдЬреА рд╢реВрдиреНрдп рд╕реНрд╡рд┐рдЪрдСрдирд╢реЗрдбреНрд╕ (рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЗрд╖рдХ, рд░реВрдЯ рдХрд┐рдП рдЧрдПрдПрд╡реЗрдВрдЯрдПрдЧрд░реНрд╕ рдИ) { рдЕрдЧрд░ (Viewport.Effect == zb) { рд╡реНрдпреВрдкреЛрд░реНрдЯ.рдлрд╝реЗрдХреНрдЯ = рдЕрд╢рдХреНрдд; ShadersBtn.Content = "Shader рд╕рдХреНрд╖рдо рдХрд░реЗрдВ"; рд╡рд╛рдкрд╕реА; } zb.Center = рдирдпрд╛ рдмрд┐рдВрджреБ (); zb.BlurAmount = 0.2; рд╡реНрдпреВрдкреЛрд░реНрдЯ.рдлреЗрдХреНрдЯ = zb; ShadersBtn.Content = "Shader рдХреЛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВ"; }
рдЕрдм, рдорд╛рд░реНрдХрд░ рдХреЛ рд╣рд┐рд▓рд╛рдиреЗ рд╕реЗ рдзрдмреНрдмрд╛ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдВрддрднрд╛рд╖рдг
рдЗрди рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреА рд╕реБрдВрджрд░рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдХреЗрд╡рд▓ рдЖрдкрдХреА рдХрд▓реНрдкрдирд╛ рд╕реЗ рд╕реАрдорд┐рдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рд╕рд╛рде рдЦреЗрд▓рддреЗ рд╣реИрдВред
рд▓рд┐рдВрдХ
рд╕реНрд░реЛрдд рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ
рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
SLARToolkit - рд╕рдВрд╡рд░реНрдзрд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдЦреЗрд▓ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕рдбреАрдХреЗ
Shazzam рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдФрд░ WPF рдХреЗ рд▓рд┐рдП рдЖрд░рд╛рдорджрд╛рдпрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡реЗрджрди рдкрддреНрд░ рд╣реИред