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); }
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(); } }
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; }