迷迷糊糊看了很多遍,对于比较核心的内容依然没有理解。今天稍微认真一些看了一遍,觉得大概懂了一些,仅作记录。
首先在代码外做简要说明.关于姿态对比原理,我的理解是:
1.pose与avatar的骨骼数据对比
2.将骨骼joint生成有序列表,将列表里同一位置的两个节点相连,在空间中形成向量
3.求出pose和avatar的向量之间的夹角
4.将pose和avatar的向量之间的夹角累加(不大于90°。因为姿势完全一致时相邻节点连线所形成的向量角度应该为0),再除以最大误差夹角和(以90°最大误差乘以比对的向量数目),就是Average difference.1- diff = match.
感觉应该是这样,没有再仔细看底层,因为做的项目姿态比对涉及到转体,明天再看一下关于rotation的内容.
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Text;
public class PoseDetectorScript : MonoBehaviour
{
//user的Model骨骼数据等
[Tooltip("User avatar model, who needs to reach the target pose.")]
public PoseModelHelper avatarModel;
//poseModel的Model骨骼数据等
[Tooltip("Model in pose that need to be reached by the user.")]
public PoseModelHelper poseModel;
//需要比对的关节点
[Tooltip("List of joints to compare.")]
public List<KinectInterop.JointType> poseJoints = new List<KinectInterop.JointType>();
//匹配阈值
[Tooltip("Threshold, above which we consider the pose is matched.")]
public float matchThreshold = 0.7f;
[Tooltip("GUI-Text to display information messages.")]
public Unit