随笔 - 49, 评论 - 7, 访问 - 201014

导航


  • 访问:201014次
  • 积分:512分
  • 排名:第38名
  • 随笔:49篇
  • 评论:7条

随笔分类

随笔档案

相册

最新评论

阅读排行榜

评论排行榜

unity3d 阅读(166) 评论(0)

新建KinectController对象,添加KinectManager脚本,KinectGestures脚本。

对这两个脚本的简单分析:

动作检测流程

KinectManager.cs中:

void Update()
{
    ...
    //处理Kinect流中的数据
    ProcessKinectStreams();
    ...
}

private void ProcessKinectStreams()
{
    ...
    //处理身体框架数据。
    ProcessBodyFrameData();
    ...
}

private void ProcessBodyFrameData()
{
    ...
    //校准新检测到的用户。
    CalibrateUser(userId, userIndex);
    ...
}


void CalibrateUser(Int64 userId, int bodyIndex)
{
    ...
    //检测用户的姿势是否完成
    CheckForCalibrationPose(Int64 UserId, int bodyIndex, KinectGestures.Gestures calibrationGesture)
    ...
}

protected virtual bool CheckForCalibrationPose(Int64 UserId, int bodyIndex, KinectGestures.Gestures calibrationGesture)
{
    ...
    //KinectGestures:CheckForGesture检测动作
    gestureManager.CheckForGesture(UserId, ref gestureData, Time.realtimeSinceStartup, ref playerJointsPos, ref playerJointsTracked);
    ...
}

KinectGestures.cs里

public virtual void CheckForGesture(long userId, ref GestureData gestureData, float timestamp, ref Vector3[] jointsPos, ref bool[] jointsTracked)
{
    //对各种常用动作进行检测
   ...
   //检测动作完成
   CheckPoseComplete()
}

protected void CheckPoseComplete(ref GestureData gestureData, float timestamp, Vector3 jointPos, bool isInPose, float durationToComplete)
{
    ...
    // 动作已经完成,设完成标志
    gestureData.complete = true;
    ...
}

可以在派生类中对CheckForGesture虚函数重载,扩展自己的动作。

 


发表评论
切换编辑模式