123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- using UnityEngine;
- using System.Collections;
- using Windows.Kinect;
- public class MultiSourceManager : MonoBehaviour {
- public int ColorWidth { get; private set; }
- public int ColorHeight { get; private set; }
-
- private KinectSensor _Sensor;
- private MultiSourceFrameReader _Reader;
- private Texture2D _ColorTexture;
- private ushort[] _DepthData;
- private byte[] _ColorData;
- public Texture2D GetColorTexture()
- {
- return _ColorTexture;
- }
-
- public ushort[] GetDepthData()
- {
- return _DepthData;
- }
- void Start ()
- {
- _Sensor = KinectSensor.GetDefault();
-
- if (_Sensor != null)
- {
- _Reader = _Sensor.OpenMultiSourceFrameReader(FrameSourceTypes.Color | FrameSourceTypes.Depth);
-
- var colorFrameDesc = _Sensor.ColorFrameSource.CreateFrameDescription(ColorImageFormat.Rgba);
- ColorWidth = colorFrameDesc.Width;
- ColorHeight = colorFrameDesc.Height;
-
- _ColorTexture = new Texture2D(colorFrameDesc.Width, colorFrameDesc.Height, TextureFormat.RGBA32, false);
- _ColorData = new byte[colorFrameDesc.BytesPerPixel * colorFrameDesc.LengthInPixels];
-
- var depthFrameDesc = _Sensor.DepthFrameSource.FrameDescription;
- _DepthData = new ushort[depthFrameDesc.LengthInPixels];
-
- if (!_Sensor.IsOpen)
- {
- _Sensor.Open();
- }
- }
- }
-
- void Update ()
- {
- if (_Reader != null)
- {
- var frame = _Reader.AcquireLatestFrame();
- if (frame != null)
- {
- var colorFrame = frame.ColorFrameReference.AcquireFrame();
- if (colorFrame != null)
- {
- var depthFrame = frame.DepthFrameReference.AcquireFrame();
- if (depthFrame != null)
- {
- colorFrame.CopyConvertedFrameDataToArray(_ColorData, ColorImageFormat.Rgba);
- _ColorTexture.LoadRawTextureData(_ColorData);
- _ColorTexture.Apply();
-
- depthFrame.CopyFrameDataToArray(_DepthData);
-
- depthFrame.Dispose();
- depthFrame = null;
- }
-
- colorFrame.Dispose();
- colorFrame = null;
- }
-
- frame = null;
- }
- }
- }
-
- void OnApplicationQuit()
- {
- if (_Reader != null)
- {
- _Reader.Dispose();
- _Reader = null;
- }
-
- if (_Sensor != null)
- {
- if (_Sensor.IsOpen)
- {
- _Sensor.Close();
- }
-
- _Sensor = null;
- }
- }
- }
|