void CreateOrUpdateHead(ARHumanBody arBody) { if (m_HeadPrefab == null) { Debug.Log("no prefab found"); return; } Transform rootTransform = arBody.transform; if (rootTransform == null) { Debug.Log("no root transform found for ARHumanBody"); return; } Transform headTransform; if (rootTransform.childCount <= 1) { GameObject go = Instantiate(m_HeadPrefab, rootTransform); headTransform = go.transform; } else { headTransform = rootTransform.GetChild(1); } XRHumanBodyJoint joint = arBody.joints[(int)JointIndices.head_joint]; headTransform.localScale = joint.anchorScale; headTransform.localRotation = joint.anchorPose.rotation; headTransform.localPosition = joint.anchorPose.position; }
void UpdateBody(ARHumanBody arBody) { Transform arBodyT = arBody.transform; if (arBodyT == null) { Debug.Log("No root transform found for ARHumanBody"); return; } InitialiseObjects(arBodyT); /// Update joint placement NativeArray<XRHumanBodyJoint> joints = arBody.joints; if(!joints.IsCreated) return; /// Update placement of all joints foreach (KeyValuePair<JointIndices3D, Transform> item in bodyJoints) { UpdateJointTransform(item.Value, joints[(int)item.Key]); } /// Update all line renderers. for (int i = 0; i < lineRenderers.Length; i++) { lineRenderers[i].SetPositions(lineRendererTransforms[i]); } }
static XRHumanBody ToHumanBody(ARHumanBody body) { return(new XRHumanBody() { trackableId = body.trackableId, pose = body.pose, estimatedHeightScaleFactor = body.estimatedHeightScaleFactor, trackingState = body.trackingState, nativePtr = IntPtr.Zero, }); }
public void ApplyBodyPose(ARHumanBody body) { var joints = body.joints; if (!joints.IsCreated) { return; } string txt = ""; for (int i = 0; i < k_NumSkeletonJoints; ++i) { XRHumanBodyJoint joint = joints[i]; var bone = m_BoneMapping[i]; if (bone != null) { bone.transform.localPosition = joint.localPose.position; bone.transform.localRotation = joint.localPose.rotation; var str1 = joint.localPose.position.x + "," + joint.localPose.position.y + "," + joint.localPose.position.z; var str2 = bone.transform.localEulerAngles.x + "," + bone.transform.localEulerAngles.y + "," + bone.transform.localEulerAngles.z; txt += str1 + "\n"; txt += str2 + "\n"; //string[] xyz = str1.Split(','); //bone.transform.localPosition = new Vector3(float.Parse(xyz[0]), float.Parse(xyz[1]), float.Parse(xyz[2])); //xyz = str2.Split(','); //bone.transform.localEulerAngles = new Vector3(float.Parse(xyz[0]), float.Parse(xyz[1]), float.Parse(xyz[2])); } else { txt += "null\n"; } } txt += "end\n"; if (logic == null) { logic = GameObject.FindGameObjectWithTag("MainLogic").GetComponent <MainLogic>(); if (logic == null) { logic = GetComponent <MainLogic>(); } Debug.Log("try to get logic"); return; } logic.SendText(txt); }
ARFoundationBody GetOrAddBody(ARHumanBody arHumanBody) { var trackableId = arHumanBody.trackableId; if (!m_TrackedBodies.TryGetValue(trackableId, out var arfBody)) { arfBody = new ARFoundationBody(trackableId.ToMarsId()); m_TrackedBodies[trackableId] = arfBody; arfBody.UpdateARFoundationBody(arHumanBody, m_BodyRigInstance.transform, m_BodyRigAnimator.humanScale, m_JointToTransform, m_BodyPoseExtractor); } else { arfBody.UpdateARFoundationBody(arHumanBody, m_BodyRigInstance.transform, m_BodyRigAnimator.humanScale, m_JointToTransform, m_BodyPoseExtractor); } return(arfBody); }
void AddHumanBody(ARHumanBody humanBody) { // Debug.Log(humanBody.ToString()); Transform root = humanBody.transform; var joints = humanBody.joints; foreach (var joint in joints) { if (!joint.tracked || joint.parentIndex < 0) { continue; } Vector3 start = root.TransformPoint(joint.anchorPose.position); Vector3 end = root.TransformPoint(joints[joint.parentIndex].anchorPose.position); this.joints.Add(new Joint(start, end)); } }
//Updates the positions of the Apparel when the user moves public void ApplyBodyPose(ARHumanBody body, Vector3 offset) { var joints = body.joints; if (!joints.IsCreated) //when the user leaves the frame { return; //it returns as there is no user to augment the apparel } for (int i = 0; i < k_NumSkeletonJoints; ++i) //traversing through all the joints of apparel { XRHumanBodyJoint joint = joints[i]; var bone = m_BoneMapping[i]; if (bone != null) { bone.transform.localPosition = joint.localPose.position + offset; //updates the position and rotation bone.transform.localRotation = joint.localPose.rotation; //of the apparel } } }
public void ApplyBodyPose(ARHumanBody body) { var joints = body.joints; if (!joints.IsCreated) { return; } for (int i = 0; i < k_NumSkeletonJoints; ++i) { XRHumanBodyJoint joint = joints[i]; var bone = m_BoneMapping[i]; if (bone != null) { bone.transform.localPosition = joint.localPose.position; bone.transform.localRotation = joint.localPose.rotation; } } }
internal static void UpdateARFoundationBody(this ARFoundationBody targetBody, ARHumanBody sourceBody, Transform poseRig, float poseScale, Transform[] jointMapping, HumanPoseHandler poseExtractor) { // Pose and transform are the same poseRig.position = sourceBody.pose.position; poseRig.rotation = sourceBody.pose.rotation; // Load transforms into temporary mesh var joints = sourceBody.joints; if (joints.IsCreated) { for (var i = 0; i < ARKitJointIndices.Total; ++i) { var joint = joints[i]; var bone = jointMapping[i]; if (bone != null) { var boneTransform = bone.transform; boneTransform.localPosition = joint.localPose.position; boneTransform.localRotation = joint.localPose.rotation; } } } // Read out pose poseExtractor.GetHumanPose(ref targetBody.BodyPoseInternal); targetBody.pose = new Pose { position = (targetBody.BodyPoseInternal.bodyPosition * poseScale - poseRig.localPosition) * poseRig.lossyScale.y + poseRig.position, rotation = targetBody.BodyPoseInternal.bodyRotation }; targetBody.Height = k_ControlRigHeight * sourceBody.estimatedHeightScaleFactor; targetBody.DeviceData = sourceBody; }