コード例 #1
0
 private void Start()
 {
     //avatarMain = this.gameObject.GetComponent(typeof(AvatarMain)) as AvatarMain;
     if (avatarModel == null)
     {
         avatarModel = this.gameObject.GetComponent(typeof(PoseModelHelper)) as PoseModelHelper;
     }
 }
コード例 #2
0
    // 取得單一姿勢正確率
    float getAccuracy(PoseModelHelper poseModelHelper, List <HumanBodyBones> comparingParts)
    {
        int       i, index, len = comparingParts.Count;
        Transform p1, p2, s1, s2;
        Vector3   playerBone, standardBone;

        float diff = 0f, total_diff = 0f;

        for (i = 0; i < len; i++)
        {
            index = PoseModelHelper.bone2IndexMap[comparingParts[i]];
            if ((p1 = model_helper.GetBoneTransform(index)) == null)
            {
                continue;
            }
            if ((s1 = poseModelHelper.GetBoneTransform(index)) == null)
            {
                continue;
            }

            if ((i + 1) >= len)
            {
                index = PoseModelHelper.bone2IndexMap[comparingParts[0]];
            }
            else
            {
                index = PoseModelHelper.bone2IndexMap[comparingParts[i + 1]];
            }

            if ((p2 = model_helper.GetBoneTransform(index)) == null)
            {
                continue;
            }
            if ((s2 = poseModelHelper.GetBoneTransform(index)) == null)
            {
                continue;
            }

            //取得玩家與標準模型 目前節點(jointType)的向量
            playerBone   = (p2.position - p1.position).normalized;
            standardBone = (s2.position - s1.position).normalized;

            //計算玩家骨架 與 姿勢骨架角度差距
            diff = Vector3.Angle(playerBone, standardBone);
            if (diff > 90f)
            {
                diff = 90f;
            }
            total_diff += diff / 90f;
        }

        total_diff /= len;

        return(1f - total_diff);
    }