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

рд╕реЗрдВрд╕рд░ рдХреЛ Xbox 360 рдХрдВрд╕реЛрд▓ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдлрд░рд╡рд░реА 2012 рд╕реЗ рдкрд░реНрд╕рдирд▓ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдореБрдЭреЗ рд╕реЗрдВрд╕рд░ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдФрд░ рдХреБрдЫ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрд╕рдбреАрдХреЗ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдкрд╣рд▓реЗ рд╣реА рдкрдврд╝ рдЪреБрдХреЗ рд╣реИрдВред рдпрд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ Kinect рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ! рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЖрдк рдкрд╛рд╕рд╛ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рдЦреЗрд▓ рдХреИрд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреНрдпреВрдмреНрд╕ рдЖрдкрдХреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ!
рддреЛ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рд╕реЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП рдПрд╕рдбреАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕реЗ
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрд╕рдбреАрдХреЗ рдореЗрдВ рдЖрдкрдХреЛ рдХрдИ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдорд┐рд▓реЗрдВрдЧреЗред рдореИрдВ Coding4Fun
рдХреНрд╡рд┐рдХ рд╕реНрдЯрд╛рд░реНрдЯ рд╕реАрд░реАрдЬрд╝ рджреЗрдЦрдиреЗ рдХреА рднреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдФрд░ codeplex рдкрд░ рд╕реНрдЯрд╛рд░реНрдЯрд░
Kinect рдкреЗрдВрдЯ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреЛрдб рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб, рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдЦреЗрд▓ рдореЗрдВ рднреМрддрд┐рдХреА рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ред рд▓реЗрдХрд┐рди рдЙрд╕рдХреЗ рдмрд┐рдирд╛ рднреА, рдХрд┐рд╕реА рддрд░рд╣ рджреБрдЦреАред рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ - рдПрдХ рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛
рднреМрддрд┐рдХреА рд╣реЗрд▓реНрдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг (4.0) WPF рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд▓реЗрдЦрдХ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ
рдпрд╣рд╛рдВ рд╣реИрдВ ), рд▓реЗрдХрд┐рди рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдиреЗ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдЖрдк рдЙрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ WPF рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ .NET 4.0 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЕрджреНрдпрддрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдВрдХред
рдЕрдм Visual Studio 2010 рдореЗрдВ рд╣рдо рдПрдХ рдирдпрд╛ WPF Application (C #) рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред SDK рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ Microsoft.Samples.Kinect.WpfViewers рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕рдореЗрдВ, рдЖрдк рдХреИрдорд░реЗ рдФрд░ рд╕реЗрдВрд╕рд░ рдорд╛рдЗрдХреНрд░реЛрдлреЛрди (рджрд░реНрд╢рдХреЛрдВ) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд┐рдпрдВрддреНрд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕реЗрдВрд╕рд░ (рдЪрдпрдирдХрд░реНрддрд╛) рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рддрд░реНрдХ рдХреЛ рдШреЗрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рддрддреНрд╡ рднреА рд╣реИред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╣рдорд╛рд░реЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реБрдЖ:

рдЯреВрд▓рдмреЙрдХреНрд╕ рд╡рд┐рдВрдбреЛ рдореЗрдВ, WpfViewers рд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

рдЕрдм MainWindows.xaml рдореЗрдВ рд╣рдо рд░реВрдЯ рдЧреНрд░рд┐рдб рдХреЛ рдХреИрдирд╡рд╕ рд╕реЗ рдмрджрд▓ рджреЗрдВрдЧреЗ, рдЗрд╕ рдкрд░ рд╣рдо рдХреНрдпреВрдмреНрд╕ рдЦреАрдВрдЪреЗрдВрдЧреЗред рд╕реЗрдВрд╕рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдФрд░ рдХреИрдорд░реЗ рд╕реЗ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╛рд░реНрдо рдкрд░ KinectSensorChooser рдФрд░ KinectColorViewer рддрддреНрд╡реЛрдВ рдХреЛ рд░рдЦреЗрдВред

рдмрдВрдзрди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдЖрдкрдХреЛ KinectColorViewer рд╡рд░реНрдЧ рдХреЗ Kinect рдЧреБрдг рдХреЛ KinectSensorChoosal рд╡рд░реНрдЧ рдХреА Kinect рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рддреЛ рд░рдВрдЧ рджрд░реНрд╢рдХ рдХреЛ рдкрддрд╛ рдЪрд▓ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рд╣рдо рдХрд┐рд╕ рд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдпрд╣ KinectSensorChanged рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ (KinectSensorChooser рд╡рд░реНрдЧ) рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рдЖрдкрдХреЛ рд╕реЗрдВрд╕рд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
sensor.ColorStream.Enable();
рд╕рдХреНрд╖рдо рдХрд░реЗрдВ рдереНрд░реЗрдб рд╡рд┐рдзрд┐рдпрд╛рдБ рдЕрддрд┐рднрд╛рд░рд┐рдд рд╣реИрдВ, рдЖрдк рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП ColorStream рдХреЗ рд▓рд┐рдП рдЕрддрд┐рднрд╛рд░рд┐рдд
рд╕рдХреНрд╖рдо рд╡рд┐рдзрд┐ рдЫрд╡рд┐ рдкреНрд░рд╛рд░реВрдк (RGB рдпрд╛ YUV) рдФрд░ рд╕рд╛рде рд╣реА рдЗрд╕рдХреЗ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ColorImageFormat рдХреЗ рдорд╛рди рдХрд╛ рдорд╛рди рд▓реЗрддреА рд╣реИред
рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдФрд░ рдХрд┐рдиреЗрдХреНрдЯ рдХреЗ рджреГрд╖реНрдЯрд┐ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╡реАрдбрд┐рдпреЛ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдЦреЗрд▓ рдореЗрдВ рднреМрддрд┐рдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВ: рдлрд╛рд░реНрд╕реЗрдлрд┐рдлрд╝рд┐рдХреНрд╕, рд╕реНрдкреНрд░рд╛рдЗрдЯрд╣реИрдВрдб.рдлреЗрдпрд░рд╣реЗрд▓рд░ рдФрд░ рд╕реНрдкреНрд░рд╛рдЗрдЯрд╣реИрдВрдбред рдлрд╝рд┐рдЬрд╝рд┐рдХреНрд╕ рд╣реЗрд▓реНрдкрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рднреМрддрд┐рдХреАред рдЕрдм рдПрдХ рдЖрдпрдд рдмрдирд╛рдПрдВ - рдпрд╣ рдлрд░реНрд╢ рдпрд╛ рдкреГрдереНрд╡реА рд╣реЛрдЧреА, рдЬреИрд╕рд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред PhysicsObjectBehavior рдХреЗ рднреМрддрд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЙрд╕рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝реЗрдВ рдФрд░ IsStatic рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред рдореИрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдлрд┐рдЬрд┐рдХреНрд╕ рд╣реЗрд▓реНрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛; рдЖрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреЗрдЬ рдкрд░ рдПрдХ рд╡реАрдбрд┐рдпреЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпреВрдмреНрд╕ рдХреЛ xaml рдорд╛рд░реНрдХрдЕрдк рдпрд╛ C # рдХреЛрдб рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣реМрд╕рд▓реЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП рдХреНрдпреВрдм рдХреЗ рд▓рд┐рдП рд╢рд╛рд░реАрд░рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ред
private void CreateCube() { var cube = new Rectangle { Name = string.Format("PART_Cube_{0}", Guid.NewGuid().ToString("N")), Width = CubeSide, Height = CubeSide, Fill = new SolidColorBrush(Colors.Red), Stroke = new SolidColorBrush(Colors.Black), StrokeThickness = 3, RadiusX = CubeCornerRadius, RadiusY = CubeCornerRadius }; var behavior = new PhysicsObjectBehavior { IsStatic = false }; behavior.Attach(cube); PART_LayoutRoot.Children.Add(cube); }
рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдХрд░реНрд╕рд░ рдмрдирд╛рдПрдВ рдЬреЛ рд╣рд╛рде рдХреА рдЧрддрд┐ рдХреЛ рдкреВрд░реЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рдЖрдк рдХреБрдЫ рддреИрдпрд╛рд░ рдЪрд┐рддреНрд░ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛
рдкрде рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд░реНрд╕рд░ рдХреЛ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдХреЛрдИ рдЪрд┐рддреНрд░ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдпрд╛ рдкрде рдХреЗ рд╕рд╛рде рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдЦреАрдВрдЪрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рддреАрд╕рд░реЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЧрдпрд╛ рдФрд░ рдкрде рдХреЛ рдмрджрд╕реВрд░рдд рдмрдирд╛ рджрд┐рдпрд╛ред

рдЧреИрдкрд┐рдВрдЧ рд░реЗрдб рд╣реЛрд▓ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдШрд╛рд╡ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдХреЗрдВрджреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдореИрдВ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдмрддрд╛рдКрдВрдЧрд╛ред
рдЕрдм рдпрд╣ рдХреЗрд╡рд▓
SkeletonFrameReady рдШрдЯрдирд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдФрд░ рдкреВрд░реЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ "рдЪрдорддреНрдХрд╛рд░ рд╣рд╛рде" рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдИрд╡реЗрдВрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдПрдХ рдлреНрд░реЗрдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдлреНрд░реЗрдо рдореЗрдВ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдорд╛рдирд╡ рдЖрдХреГрддрд┐рдпреЛрдВ (рдХрдВрдХрд╛рд▓) рдХреЗ рд▓рд┐рдП рдЗрд╕рд╕реЗ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓реЗрдВ, рдФрд░ рдЗрди рдЖрдВрдХрдбрд╝реЛрдВ рдореЗрдВ рд╕реЗ рдкрд╣рд▓реЗ рдЯреНрд░реИрдХ рдХрд┐рдП рдЧрдП рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред Kinect рдПрдХ рдлреНрд░реЗрдо рдореЗрдВ рдЫрд╣ рдЖрдВрдХрдбрд╝реЛрдВ рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рджреЛ рд╣реА рдЖрдВрджреЛрд▓рди рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (
рдкреНрд▓реЗрдпрд░ рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди рдбреЗрдЯрд╛ рджреЗрдЦреЗрдВ)ред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЦрд┐рд▓рд╛рдбрд╝реА рд╣реИ:
private Skeleton GetTrackedSkeleton(SkeletonFrameReadyEventArgs frameReadyEventArgs) { using (SkeletonFrame skeletonFrameData = frameReadyEventArgs.OpenSkeletonFrame()) { if (skeletonFrameData == null) { return null; } Skeleton[] allSkeletons = new Skeleton[skeletonFrameData.SkeletonArrayLength]; skeletonFrameData.CopySkeletonDataTo(allSkeletons); return allSkeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked).FirstOrDefault(); } }
рдорд╛рдирд╡ рдЖрдХреГрддрд┐ (рдХрдВрдХрд╛рд▓) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА 20 рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИред рд╡рд┐рдЯреНрд░реБрд╡рд┐рдпрди рдЖрджрдореА рдХреА рдЫрд╡рд┐ рдЙрдирдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдХрдВрдХрд╛рд▓ рд╕реЗ рд╣рдо рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд╢рд░реАрд░ рдХреЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЦреЗрд▓ рдореИрджрд╛рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрд╢рд╛рд░рд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:
- рдпрджрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рдХрд╛ рдмрд╛рдпрд╛рдБ рд╣рд╛рде рдКрдкрд░ рдЙрдард╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдЙрд╕рдХрд╛ рджрд╛рд╣рд┐рдирд╛ рд╣рд╛рде рдорд░рдиреЗ рдХреЗ рдКрдкрд░ рд╣реИ, рддреЛ рджрд╛рдпрд╛рдБ рд╣рд╛рде (рдбреНрд░реИрдЧреНрд╕) рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ;
- рдпрджрд┐ рдмрд╛рдпрд╛рдБ рд╣рд╛рде рдиреАрдЪреЗ рдХреА рдУрд░ рд╣реИ , рддреЛ рджрд╛рдпрд╛рдБ рдЦреЗрд▓ рдореИрджрд╛рди рдкрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдмрд╛рдПрдВ рд╣рд╛рде рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдпрд╣ рдмрд╛рдПрдВ рд╣рд╛рде рдФрд░ рдмрд╛рдПрдВ рдХрдВрдзреЗ рдХреЗ рд╡рд╛рдИ-рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
private bool IsAcionMode(JointCollection joints) { Joint lh = joints[JointType.HandLeft]; Joint ls = joints[JointType.ShoulderLeft]; return lh.Position.Y > ls.Position.Y; }
рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рдХрд╛ рджрд╛рд╣рд┐рдирд╛ рд╣рд╛рде рдорд░рдиреЗ рдХреЗ рдКрдкрд░ рд╣реИ, рдЖрдк
VisualTreeHelper рд╡рд░реНрдЧ рдХреЗ
рд╣рд┐рдЯрдЯреЗрд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред "рдЪрдорддреНрдХрд╛рд░ рд╣рд╛рде" рдореЗрдВ рд▓рд╛рд▓ рд╡реГрддреНрдд рдпрд╛рдж рд╣реИ? рдпрд╣ рдЗрд╕ рдмрд┐рдВрджреБ рдХреЗ рддрд╣рдд рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдХреНрдпреВрдм рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЗрд╢рд╛рд░реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рд░реНрдп:
private void UpdateScenaItems(Skeleton skeleton) { Point currentPos = skeleton.Joints[JointType.HandRight] .ScaleTo((int)PART_LayoutRoot.ActualWidth, (int)PART_LayoutRoot.ActualHeight, 0.50f, 0.20f) .Position .ToPoint2D(); Rectangle cube = GetCubeUnderCursor(currentPos); var isAction = IsAcionMode(skeleton.Joints); if (!isAction || (isAction && cube == null)) { UpdateCursorPosition(currentPos); return; } MoveCubeUnderCursor(cube, currentPos); }
ScaleTo рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХреЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ Coding4Fun Kinect Toolkit (NuGet рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз) рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред ToPoint2D рдореЗрд░реА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрдВрдХрд╛рд▓ рдХреЛ
рдкреНрд╡рд╛рдЗрдВрдЯ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ UpdateCursorPosition рд╡рд┐рдзрд┐ рдореЗрдВ рд╣рдо рдХреЗрд╡рд▓ рдХрд░реНрд╕рд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ MoveCubeUnderCursor рд╡рд┐рдзрд┐ рдореЗрдВ рд╣рдо рдШрди рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВред
рдЕрдм рдЖрдк рдЦреЗрд▓ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рд╣рд┐рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ!
рдиреАрдЪреЗ рдЖрдкрдХреЛ рдЧреЗрдо рдХреЗ рд╕реЛрд░реНрд╕ рдХреЛрдб рдФрд░ рдЕрд╕реЗрдВрдмрд▓реА рдорд┐рд▓реЗрдВрдЧреЗред
рдкреБрдирд╢реНрдЪ рд╕рдордп-рд╕рдордп рдкрд░, рдмреНрд▓реЙрдХ рдПрдХ рд╕рд╛рде рдЪрд┐рдкрдХрддреЗ рд╣реИрдВ рдпрд╛ рдлрд░реНрд╢ рдореЗрдВ рдлрдВрд╕ рдЬрд╛рддреЗ рд╣реИрдВ - рдордЬрд╝реЗрджрд╛рд░ред
рдкреАрдкреАрдПрд╕
рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╡реЙрдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреИрд╕реЗ рд╕рд┐рдЦрд╛рдирд╛ рд╣реИред
рдЧреЗрдо рдмрдирд╛рддрд╛ рд╣реИрдЦреЗрд▓ рд╕реНрд░реЛрдд рдХреЛрдбPhysicsHelper рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрд╕реЗрдВрдмрд▓реАPhysicsHelper рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрд░реЛрдд рдХреЛрдб