예제 #1
0
    public override void Validate(KinectBodiesReceiver.KinectInfo info, KinectBodiesReceiver.BodyData[] bodyData)
    {
        Vector3 fwd = transform.forward;

        fwd.y = 0;
        fwd.Normalize();

        Vector3 center = transform.position;

        center.y = groundHeight;
        center  += fwd * zOffset;

        int   closestIndex = -1;
        float closestDist  = float.MaxValue;

        for (int i = 0; i < bodyData.Length; i++)
        {
            var     data = bodyData[i];
            Vector3 pos  = data.modifiedByMatrix ? data.position : info.matrix.MultiplyPoint3x4(data.position);

            pos.y = center.y;

            float dist = Vector3.Distance(pos, center);

            if (dist > radius)
            {
                data.valid = false;
            }
            else
            {
                if (dist < closestDist)
                {
                    closestDist  = dist;
                    closestIndex = i;
                }
            }
        }

        if (closestToCenterOnly)
        {
            for (int i = 0; i < bodyData.Length; i++)
            {
                if (i != closestIndex)
                {
                    bodyData[i].valid = false;
                }
                else
                {
                    lastValidatedPosition = info.matrix.MultiplyPoint3x4(bodyData[i].position);
                }
            }
        }
    }
예제 #2
0
 //  public abstract void Validate(BodyReceiver.KinectInfo info, BodyReceiver.BodyData[] bodyData);
 public abstract void Validate(KinectBodiesReceiver.KinectInfo info, KinectBodiesReceiver.BodyData[] bodyData);