示例#1
0
    public LeanPoseDetector(float minLeanAngle, float leanRangeAngle)
    {
        m_minLeanAngle = minLeanAngle;
        m_leanRangeAngle = leanRangeAngle;

        m_leanDir = LeanPoseDetector.LeanDir.Center;
    }
示例#2
0
    public override void UpdateFrame()
    {
        m_leanDir = LeanPoseDetector.LeanDir.Center;

        if(CheckPoints() == false)
            return;

        bool foundPos = TestLeanPose();
        if(foundPos == false)
            return;
    }
示例#3
0
    protected bool TestLeanPose()
    {
        Vector3 midShoulder = (m_rightShoulder - m_leftShoulder)/2 + m_leftShoulder;
        Vector3 midHip = (m_rightHip - m_leftHip)/2 + m_leftHip;

        Vector3 trunk = midShoulder - midHip;
        float leanAngle = Vector3.Angle(Vector3.up, trunk.normalized);

        if(Mathf.Abs(leanAngle) < m_minLeanAngle)
            return false;

        // learn direction angle, Vector3.right is the base.
        float leanHorizontalAngle = Vector3.Angle(trunk.normalized - Vector3.up, Vector3.right);
        float leanVerticalAngle = Vector3.Angle(trunk.normalized - Vector3.up, Vector3.forward);

        if(Mathf.Abs(leanHorizontalAngle) < m_leanRangeAngle / 2)
        {
            m_leanDir = LeanPoseDetector.LeanDir.Right; // mirror;
        }
        if(Mathf.Abs(leanHorizontalAngle - 180.0f) < m_leanRangeAngle / 2)
        {
            m_leanDir = LeanPoseDetector.LeanDir.Left; // mirror;
        }

        if(Mathf.Abs(leanVerticalAngle) < m_leanRangeAngle / 2)
        {
            m_leanDir = LeanPoseDetector.LeanDir.Forward; // mirror;
        }
        if(Mathf.Abs(leanVerticalAngle - 180.0f) < m_leanRangeAngle / 2)
        {
            m_leanDir = LeanPoseDetector.LeanDir.Backward; // mirror;
        }

        //Debug.Log("HAngle="+leanHorizontalAngle+" VAngle="+leanVerticalAngle+" dir="+m_leanDir);
        return true;
    }