Example #1
0
    private void TakeSample()
    {
        OpenNI.SkeletonJointPosition jointPosition;
        bool success = kinectSelection.GetPlayer(0).GetSkeletonJointPosition(OpenNI.SkeletonJoint.RightHand, out jointPosition);

        timeSinceLastSample += Time.deltaTime;

        //check if we should take sample
        if (!success ||
            !psMoveWrapper.sphereVisible[calibratingPSMoveControllerId] ||
            psMoveWrapper.handleVelocity[calibratingPSMoveControllerId].magnitude >= 10.0f ||
            jointPosition.Confidence <= 0.5 ||
            timeSinceLastSample < timeBetweenSamples)
        {
            return;
        }

        rawPSMoveSamples.Add(psMoveWrapper.handlePosition[calibratingPSMoveControllerId]);
        psMoveSamples.Add(coordinateSystem.ConvertMovePosition(psMoveWrapper.handlePosition[calibratingPSMoveControllerId]));
        kinectSamples.Add(coordinateSystem.ConvertKinectPosition(jointPosition.Position));

        numberOfSamplesTaken++;
        timeSinceLastSample = 0;

        calibrationSpheres.Add(Instantiate(calibrationSphere, coordinateSystem.ConvertKinectPosition(jointPosition.Position), Quaternion.identity) as GameObject);
    }
Example #2
0
    private void updateKinectFloorData()
    {
        if (coordinateSystem)
        {
            coordinateSystem.ResetKinectFloorNormal();
            coordinateSystem.ResetKinectDistanceFromFloor();

            OpenNI.Plane3D floor            = sceneAnalyzer.Floor;
            Vector3        newFloorNormal   = new Vector3(floor.Normal.X, floor.Normal.Y, floor.Normal.Z).normalized;
            Vector3        newFloorPosition = coordinateSystem.ConvertKinectPosition(floor.Point);

            //Project the position of the kinect camera onto the floor
            //http://en.wikipedia.org/wiki/Point_on_plane_closest_to_origin
            //http://en.wikipedia.org/wiki/Plane_(geometry)
            float   d = newFloorNormal.x * newFloorPosition.x + newFloorNormal.y * newFloorPosition.y + newFloorNormal.z * newFloorPosition.z;
            Vector3 closestFloorPointToKinect = new Vector3(newFloorNormal.x, newFloorNormal.y, newFloorNormal.z);
            closestFloorPointToKinect = (closestFloorPointToKinect * d) / closestFloorPointToKinect.sqrMagnitude;

            //transform the point from Kinect's coordinate system rotation to Unity's rotation
            closestFloorPointToKinect = Quaternion.FromToRotation(newFloorNormal, Vector3.up) * closestFloorPointToKinect;

            //floorPlane.transform.position = closestFloorPointToKinect;


            coordinateSystem.SetKinectFloorNormal(newFloorNormal);
            //floorNormal = newFloorNormal.normalized;
            coordinateSystem.SetKinectDistanceFromFloor(closestFloorPointToKinect.magnitude);

            //if(!usingExistingSceneAnalyzer)
            //	sceneAnalyzer.StopGenerating();
        }
    }
Example #3
0
    private void UpdateRootData(int player)
    {
        OpenNI.SkeletonJointTransformation data;

        if (!playerManager.GetPlayer(player).GetSkeletonJoint(OpenNI.SkeletonJoint.Torso, out data))
        {
            return;
        }

        Vector3 newRootPosition = coordinateSystem.ConvertKinectPosition(data.Position.Position);

        newRootPosition = Vector3.Scale(newRootPosition, rootSpeedScaling);
        skeletons[player].root.position           = newRootPosition;
        skeletons[player].root.positionConfidence = data.Position.Confidence;
        skeletons[player].root.rotation           = coordinateSystem.ConvertKinectRotation(data.Orientation);
        skeletons[player].root.rotationConfidence = data.Orientation.Confidence;
    }