/// <summary> /// Build a skeleton according to the markers /// </summary> /// <param name="markerData">A list of markers </param> /// <returns>A complete skeleton</returns> public BipedSkeleton SolveSkeleton(List <LabeledMarker> markerData) { if (skeleton == null || skeletonBuffer == null || mp == null || joints == null || ikApplier == null) { skeleton = new BipedSkeleton(); skeletonBuffer = new BipedSkeleton(); MarkersNames markersMap; mp = new MarkersPreprocessor(markerData, out markersMap, bodyPrefix: MarkerPrefix);; joints = new JointLocalization(markersMap); ikApplier = new IKApplier(skeleton); } Dictionary <string, OpenTK.Vector3> markers; mp.ProcessMarkers(markerData, out markers, MarkerPrefix); var temp = skeleton; skeleton = skeletonBuffer; skeletonBuffer = temp; joints.GetJointLocation(markers, ref skeleton); ikApplier.Interpolation = Interpolation; if (SolveWithIK) { ikApplier.ApplyIK(ref skeleton); } return(skeleton); }
/// <summary> /// Build a skeleton according to the markers /// </summary> /// <param name="markerData">A list of markers </param> /// <returns>A complete skeleton</returns> public BipedSkeleton SolveSkeleton(List <Marker> markerData) { if (skeleton == null || skeletonBuffer == null || mp == null || joints == null || ikApplier == null) { skeleton = new BipedSkeleton(); skeletonBuffer = new BipedSkeleton(); MarkersNames markersMap; mp = new MarkersPreprocessor(markerData, out markersMap, bodyPrefix: MarkerPrefix); joints = new JointLocalization(markersMap); ikApplier = new IKApplier(skeleton); // Set segment tracking markers for virtual marker construction st = new ŚegmentTracking(skeleton, markersMap, markerData); } var temp = skeleton; skeleton = skeletonBuffer; skeletonBuffer = temp; Dictionary <string, OpenTK.Vector3> markers; mp.UpdateMarkerList(markerData, out markers); mp.ProcessMarkers(out markers); joints.BodyData.Height = bodyHeight; joints.BodyData.Mass = bodyMass; joints.GetJointLocations(markers, ref skeleton); // Try to reconstruct virtual markers if (UseTrackingMarkers) { if (st.ProcessMarkers(skeleton, markerData, ref markers, MarkerPrefix)) { mp.ProcessMarkers(out markers); joints.GetJointLocations(markers, ref skeleton); } } ikApplier.Interpolation = Interpolation; if (SolveWithIK) { ikApplier.ApplyIK(ref skeleton); } return(skeleton); }