public void ApplyOffsetToPosition() { var offset = m_PositionOnlyOffsetPose.ApplyOffsetTo(m_DefaultPose); Assert.AreEqual(m_DefaultPose.position + m_PositionOnlyOffsetPose.position, offset.position); Assert.AreEqual(Quaternion.identity, offset.rotation); }
protected bool TryGetPlaneData(LayerPlaneData layerPlane, Pose layerOriginPose, List <Vector3> vertices, out Pose pose, out Vector3 center, out Vector2 extents) { var layerPlaneVertices = layerPlane.Vertices; extents = GeometryUtils.OrientedMinimumBoundingBox2D(layerPlaneVertices, k_PlaneBoundingBox); if (extents.x < m_MinSideLength || extents.y < m_MinSideLength) { pose = default; center = default; return(false); } var centroid = GeometryUtils.PolygonCentroid2D(layerPlaneVertices); var layerPlanePose = new Pose(centroid, GeometryUtils.RotationForBox(k_PlaneBoundingBox)); foreach (var vertex in layerPlaneVertices) { var localVertex = layerPlanePose.ApplyInverseOffsetTo(vertex); vertices.Add(localVertex); } for (var j = 0; j < k_PlaneBoundingBox.Length; ++j) { k_PlaneBoundingBox[j] = layerPlanePose.ApplyInverseOffsetTo(k_PlaneBoundingBox[j]); } layerPlanePose.position += k_Up * (layerPlane.YOffsetFromLayer + k_PlaneYEpsilon); pose = layerOriginPose.ApplyOffsetTo(layerPlanePose); center = (k_PlaneBoundingBox[0] + k_PlaneBoundingBox[2]) * 0.5f; return(true); }
public void SetPolygonLocalSpace(List <Vector3> newLocalVertices, Pose newPose) { // Remove extra elements beyond size of input list if (newLocalVertices.Count < m_WorldVerts.Count) { m_WorldVerts.RemoveRange(newLocalVertices.Count, m_WorldVerts.Count - newLocalVertices.Count); } if (newLocalVertices.Count < m_LocalVerts.Count) { m_LocalVerts.RemoveRange(newLocalVertices.Count, m_LocalVerts.Count - newLocalVertices.Count); } // Copy values and transform from local to world for (var i = 0; i < newLocalVertices.Count; i++) { if (i < m_WorldVerts.Count) { m_WorldVerts[i] = newPose.ApplyOffsetTo(newLocalVertices[i]); } else { m_WorldVerts.Add(newPose.ApplyOffsetTo(newLocalVertices[i])); } if (i < m_LocalVerts.Count) { m_LocalVerts[i] = newLocalVertices[i]; } else { m_LocalVerts.Add(newLocalVertices[i]); } } pose = newPose; }
public static Vector3 PoseToCameraSpace(this IUsesCameraOffset obj, Pose pose, Vector3 point) { return(obj.ApplyOffsetToPosition(pose.ApplyOffsetTo(point))); }
public void ApplyOffsetToRotation() { var offset = m_NonIdentityRotationPose.ApplyOffsetTo(m_DefaultPose); Assert.AreEqual(m_NonIdentityRotationPose.rotation, offset.rotation); }
public void IdentityPoseOffsetDoesNothing() { Assert.AreEqual(m_DefaultPose, m_IdentityPose.ApplyOffsetTo(m_DefaultPose)); Assert.AreEqual(m_DefaultPose, m_DefaultPose.ApplyOffsetTo(m_IdentityPose)); }