CoordinateMapperView.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using UnityEngine;
  2. using System.Collections;
  3. using Windows.Kinect;
  4. public class CoordinateMapperView : MonoBehaviour
  5. {
  6. public GameObject CoordinateMapperManager;
  7. private CoordinateMapperManager _CoordinateMapperManager;
  8. private ComputeBuffer depthBuffer;
  9. private ComputeBuffer bodyIndexBuffer;
  10. DepthSpacePoint[] depthPoints;
  11. byte[] bodyIndexPoints;
  12. void Start ()
  13. {
  14. ReleaseBuffers ();
  15. if (CoordinateMapperManager == null)
  16. {
  17. return;
  18. }
  19. _CoordinateMapperManager = CoordinateMapperManager.GetComponent<CoordinateMapperManager>();
  20. Texture2D renderTexture = _CoordinateMapperManager.GetColorTexture();
  21. if (renderTexture != null)
  22. {
  23. gameObject.renderer.material.SetTexture("_MainTex", renderTexture);
  24. }
  25. depthPoints = _CoordinateMapperManager.GetDepthCoordinates ();
  26. if (depthPoints != null)
  27. {
  28. depthBuffer = new ComputeBuffer(depthPoints.Length, sizeof(float) * 2);
  29. gameObject.renderer.material.SetBuffer("depthCoordinates", depthBuffer);
  30. }
  31. bodyIndexPoints = _CoordinateMapperManager.GetBodyIndexBuffer ();
  32. if (bodyIndexPoints != null)
  33. {
  34. bodyIndexBuffer = new ComputeBuffer(bodyIndexPoints.Length, sizeof(float));
  35. gameObject.renderer.material.SetBuffer ("bodyIndexBuffer", bodyIndexBuffer);
  36. }
  37. }
  38. void Update()
  39. {
  40. //TODO: fix perf on this call.
  41. depthBuffer.SetData(depthPoints);
  42. // ComputeBuffers do not accept bytes, so we need to convert to float.
  43. float[] buffer = new float[512 * 424];
  44. for (int i = 0; i < bodyIndexPoints.Length; i++)
  45. {
  46. buffer[i] = (float)bodyIndexPoints[i];
  47. }
  48. bodyIndexBuffer.SetData(buffer);
  49. buffer = null;
  50. }
  51. private void ReleaseBuffers()
  52. {
  53. if (depthBuffer != null) depthBuffer.Release();
  54. depthBuffer = null;
  55. if (bodyIndexBuffer != null) bodyIndexBuffer.Release();
  56. bodyIndexBuffer = null;
  57. depthPoints = null;
  58. bodyIndexPoints = null;
  59. }
  60. void OnDisable()
  61. {
  62. ReleaseBuffers ();
  63. }
  64. }