Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 3
0
        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)));
 }
Ejemplo n.º 5
0
        public void ApplyOffsetToRotation()
        {
            var offset = m_NonIdentityRotationPose.ApplyOffsetTo(m_DefaultPose);

            Assert.AreEqual(m_NonIdentityRotationPose.rotation, offset.rotation);
        }
Ejemplo n.º 6
0
 public void IdentityPoseOffsetDoesNothing()
 {
     Assert.AreEqual(m_DefaultPose, m_IdentityPose.ApplyOffsetTo(m_DefaultPose));
     Assert.AreEqual(m_DefaultPose, m_DefaultPose.ApplyOffsetTo(m_IdentityPose));
 }