public static GameObject UpdatePlaneWithAnchorTransform(GameObject plane, ARPlaneMesh arPlane) { plane.transform.position = UnityARMatrixOps.GetPosition(arPlane.transform); plane.transform.rotation = UnityARMatrixOps.GetRotation(arPlane.transform); PlacenotePlaneMeshRender ppmr = plane.GetComponent <PlacenotePlaneMeshRender> (); if (ppmr != null) { ppmr.UpdateMesh(arPlane); } MeshFilter mf = plane.GetComponentInChildren <MeshFilter> (); if (mf != null) { if (ppmr == null) { //since our plane mesh is actually 10mx10m in the world, we scale it here by 0.1f mf.gameObject.transform.localScale = new Vector3(arPlane.extent.x * 0.1f, arPlane.extent.y * 0.1f, arPlane.extent.z * 0.1f); //convert our center position to unity coords mf.gameObject.transform.localPosition = new Vector3(arPlane.center.x, arPlane.center.y, -arPlane.center.z); } } return(plane); }
public static GameObject UpdatePlaneWithAnchorTransform(GameObject plane, ARPlaneAnchor arPlaneAnchor) { //do coordinate conversion from ARKit to Unity Vector3 position = UnityARMatrixOps.GetPosition(arPlaneAnchor.transform); Quaternion rotation = UnityARMatrixOps.GetRotation(arPlaneAnchor.transform); //Transform to placenote frame of reference (planes are detected in ARKit frame of reference) Matrix4x4 worldTransform = Matrix4x4.TRS(position, rotation, Vector3.one); Matrix4x4?placenoteTransform = LibPlacenote.Instance.ProcessPose(worldTransform); if (placenoteTransform == null) //no map related transforms are appropriate { placenoteTransform = worldTransform; } plane.transform.position = PNUtility.MatrixOps.GetPosition(placenoteTransform.Value); plane.transform.rotation = PNUtility.MatrixOps.GetRotation(placenoteTransform.Value); PlacenotePlaneMeshRender ppmr = plane.GetComponent <PlacenotePlaneMeshRender> (); if (ppmr != null) { ppmr.UpdateMesh(arPlaneAnchor); } MeshFilter mf = plane.GetComponentInChildren <MeshFilter> (); if (mf != null) { if (ppmr == null) { //since our plane mesh is actually 10mx10m in the world, we scale it here by 0.1f mf.gameObject.transform.localScale = new Vector3(arPlaneAnchor.extent.x * 0.1f, arPlaneAnchor.extent.y * 0.1f, arPlaneAnchor.extent.z * 0.1f); //convert our center position to unity coords mf.gameObject.transform.localPosition = new Vector3(arPlaneAnchor.center.x, arPlaneAnchor.center.y, -arPlaneAnchor.center.z); } } return(plane); }