рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ + рд╕рдВрд╡рд░реНрдзрд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ + рд╢реЗрдбреНрд╕

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред



рдореБрдЭреЗ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИ, рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд╡рд░реНрдзрд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдореЗрдВ рдЖрдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ 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> 




рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдХреИрдорд░реЗ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреИрдорд░реЗ рд╕реЗ рдЫрд╡рд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрд╣ рдмрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:



  1. рдХреИрдкреНрдЪрд░ рд╕реЛрд░реНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБ
  2. рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдХреИрдорд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд╛рдВрдЧрддреЗ рд╣реИрдВ
  3. рдЪрд┐рддреНрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ




рдХрд╣реАрдВ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред



рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, XAML рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдПрдХ рдмрдЯрди рдХреНрд▓рд┐рдХ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рд▓рд┐рдВрдХ:



 рднрд░рд╛ рд╣реБрдЖ = "UserControl_Loaded">
 рдФрд░
 <рдмрдЯрди рдХрдВрдЯреЗрдВрдЯ = "рд▓реЗрдЯреНрд╕ рд╕реНрдЯрд╛рд░реНрдЯ" рдкреЗрдбрд┐рдВрдЧ = "5" рдорд╛рд░реНрдЬрд┐рди = "5" рд╣реЙрд░рд┐рдЬрд╝реЙрдиреНрдЯрд▓ рдПрд▓рд╛рдЗрдЧрдореЗрдВрдЯ = "рд╕реЗрдВрдЯрд░" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ = "рдСрдирд╕реНрдЯрд╛рд░реНрдЯрдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ" />




рдпрд╣ рд╕реНрд╡рдпрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ:



 рдирд┐рдЬреА рд╢реВрдиреНрдп UserControl_Loaded (рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЗрд╖рдХ, RoutedEventArgs e)
 {
       рдХреИрдкреНрдЪрд░рд╕реЛрд░реНрд╕ = рдирдпрд╛ рдХреИрдкреНрдЪрд░ рд╕реНрд░реЛрдд (); 
       CaptureSource.VideoCaptureDevice = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice ();  // рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреИрдорд░реЗ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ
 
       var vidBrush = new VideoBrush ();
       vidBrush.SetSource (рдХреИрдкреНрдЪрд░рд╕реЛрд░реНрд╕);  // рдмреНрд░рд╢ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрдорд░реЗ рд╕реЗ рд╡реАрдбрд┐рдпреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ
       рд╡реНрдпреВрдкреЛрд░реНрдЯ.рдлрд┐рд▓ = рд╡рд┐рджрдмреНрд░рд╢;  // рд╣рдорд╛рд░реА рдЖрдпрдд рдкрд░ рдмреНрд░рд╢ рдХреЗ рд╕рд╛рде рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВ
 }

 рдирд┐рдЬреА рд╢реВрдиреНрдп onStartBtnClick (рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЗрд╖рдХ, RoutedEventArgs e)
 {
       рдЕрдЧрд░ (рдХреИрдкреНрдЪрд░рдбреЗрд╡рд┐рд╕рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдиред рдЕрд╕реЗрдВрд╕рдЯрд┐рд╡рдбреЗрд╡рд┐рд╕рдПрдЯ ()) // рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдкреВрдЫреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреИрдорд░реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ
       {
           рдХреИрдкреНрдЪрд░ рд╕реЛрд░реНрд╕ред рдХрд╛рд░реНрдЯ (); // рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдЪрд▓реЗрдВ!
       }
 }




рдЕрдм рдХреИрдорд░реЗ рд╕реЗ рдЪрд┐рддреНрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред



рд╕рдВрд╡рд░реНрдзрд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛




рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:



  1. рд╣рдо рдХреИрдкреНрдЪрд░рд╕реЛрд░реНрд╕рдореИрдХрд░рдбреЗрдЯреЗрдЯрд░ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХреИрдорд░рд╛ рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рдорд╛рд░реНрдХрд░реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ
  2. рдХреБрдЫ рдорд┐рд▓ рдЬрд╛рдП, рддреЛ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдмреБрд▓рд╛рдУ
  3. рд╣рдо рдорд╛рд░реНрдХрд░ рдХреЗ рдкреНрд░рдХреНрд╖реЗрдкрдг рдореИрдЯреНрд░рд┐рдХреНрд╕ (рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╕реНрдерд┐рддрд┐) рдХреЛ рд╕реНрд╡рдпрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
  4. рд╣рдо рдЗрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдорд╛рд░реНрдХрд░ рдХреЗ рдКрдкрд░ рдУрд╡рд░рд▓реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ




рдЗрди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХреЛрдб рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ:



 рдирд┐рдЬреА рд╢реВрдиреНрдп 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 рдХреЗ рд▓рд┐рдП рдЖрд░рд╛рдорджрд╛рдпрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡реЗрджрди рдкрддреНрд░ рд╣реИред



All Articles