Хорошо так, чтобы лучше объяснить себе:Kinect One & Unity - проблема BodyIndexSource рама, рисунок "тело-тень" с помощью BodyIndexSource
Цель: Making "теневые фигуры" в единстве Использование: Kinect One, Unity, C#
Я использую источник примера Windows, который они предоставляют для Unity.
В основном то, что я сделал это сделать BodyIndexSourceManager.cs и BodyIndexSourceView.cs таким же образом они сделали данные показывают цвет/глубина/Infrared/BodySource в единстве. Я не вижу проблемы, но это также связано с тем, что я никогда не работал с байтовыми данными в глубину, и мало что известно о том, какие данные фактически получены из потока BodyIndexSource.
Пример кода:
public class BodyIndexSourceManager : MonoBehaviour
{
public int IndexWidth { get; private set; }
public int IndexHeight { get; private set; }
private KinectSensor _Sensor;
private BodyIndexFrameReader _Reader;
private Texture2D _Texture;
private byte[] _Data;
public Texture2D GetTexture()
{
return _Texture;
}
void Start()
{
_Sensor = KinectSensor.GetDefault();
if (_Sensor != null)
{
_Reader = _Sensor.BodyIndexFrameSource.OpenReader();
var frameDesc = _Sensor.BodyIndexFrameSource.FrameDescription;
IndexWidth = frameDesc.Width;
IndexHeight = frameDesc.Height;
_Texture = new Texture2D(frameDesc.Width, frameDesc.Height, TextureFormat.RGBA32, false);
if (!_Sensor.IsOpen)
{
_Sensor.Open();
}
}
}
void Update()
{
if (_Reader != null)
{
var frame = _Reader.AcquireLatestFrame();
if (frame != null)
{
Debug.Log("frame not null");
frame.CopyFrameDataToArray(_Data);
_Texture.LoadRawTextureData(_Data);
_Texture.Apply();
frame.Dispose();
frame = null;
}
}
}
void OnApplicationQuit()
{
if (_Reader != null)
{
_Reader.Dispose();
_Reader = null;
}
if (_Sensor != null)
{
if (_Sensor.IsOpen)
{
_Sensor.Close();
}
_Sensor = null;
}
}
}
Следующая класс:
public class BodyIndexSourceView : MonoBehaviour
{
public GameObject BodyIndexSourceManager;
private BodyIndexSourceManager _bodyIndexManager;
void Start()
{
gameObject.renderer.material.SetTextureScale("_MainTex", new Vector2(-1, 1));
}
void Update()
{
if (BodyIndexSourceManager == null)
{
return;
}
_bodyIndexManager = BodyIndexSourceManager.GetComponent<BodyIndexSourceManager>();
if (_bodyIndexManager == null)
{
return;
}
gameObject.renderer.material.mainTexture = _bodyIndexManager.GetTexture();
}
}
Я, вероятно, просто делать неправильные вещи или наблюдением за что-то. Надеюсь, кто-то может показать мне некоторое понимание, чтобы я мог продолжить!^_^Спасибо заранее за любой ответ.
Резюме: Если вы знаете, что лучший подход нарисовать «только» пиксельные-данные отслеживаются тел в Unity через Kinect One, пожалуйста, дайте мне знать, или сказать мне, что я делаю неправильно для начала @ приведенный выше код.