public static List <Vector3> CollectModelSpriteVerts(Sprite sprite, AABB collectAABB)
        {
            var spriteModelVerts = sprite.vertices;
            var collectedVerts   = new List <Vector3>(7);

            foreach (var vertPos in spriteModelVerts)
            {
                if (BoxMath.ContainsPoint(vertPos, collectAABB.Center, collectAABB.Size, Quaternion.identity))
                {
                    collectedVerts.Add(vertPos);
                }
            }

            return(collectedVerts);
        }
        public static List <Vector3> CollectWorldSpriteVerts(Sprite sprite, Transform spriteTransform, OBB collectOBB)
        {
            var spriteWorldVerts = sprite.GetWorldVerts(spriteTransform);
            var collectedVerts   = new List <Vector3>(7);

            foreach (var vertPos in spriteWorldVerts)
            {
                if (BoxMath.ContainsPoint(vertPos, collectOBB.Center, collectOBB.Size, collectOBB.Rotation))
                {
                    collectedVerts.Add(vertPos);
                }
            }

            return(collectedVerts);
        }
Example #3
0
        public List <Vector3> OverlapVerts(OBB obb, MeshTransform meshTransform)
        {
            if (!_isBuilt)
            {
                Build();
            }

            OBB           meshSpaceOBB    = meshTransform.InverseTransformOBB(obb);
            HashSet <int> usedIndices     = new HashSet <int>();
            var           overlappedNodes = _tree.OverlapBox(meshSpaceOBB);

            if (overlappedNodes.Count == 0)
            {
                return(new List <Vector3>());
            }

            var overlappedVerts = new List <Vector3>(50);

            foreach (var node in overlappedNodes)
            {
                int          triangleIndex = node.Data.TriangleIndex;
                MeshTriangle triangleInfo  = _mesh.GetTriangle(triangleIndex);
                var          modelVerts    = triangleInfo.Vertices;

                for (int ptIndex = 0; ptIndex < modelVerts.Length; ++ptIndex)
                {
                    int vertIndex = triangleInfo.GetVertIndex(ptIndex);
                    if (usedIndices.Contains(vertIndex))
                    {
                        continue;
                    }

                    Vector3 modelVert = modelVerts[ptIndex];
                    if (BoxMath.ContainsPoint(modelVert, meshSpaceOBB.Center, meshSpaceOBB.Size, meshSpaceOBB.Rotation))
                    {
                        overlappedVerts.Add(meshTransform.TransformPoint(modelVert));
                        usedIndices.Add(vertIndex);
                    }
                }
            }

            return(overlappedVerts);
        }
Example #4
0
        public bool OverlapVerts(OBB obb, MeshTransform meshTransform, List <Vector3> verts)
        {
            verts.Clear();
            if (!_isBuilt)
            {
                Build();
            }

            OBB meshSpaceOBB = meshTransform.InverseTransformOBB(obb);

            if (!_tree.OverlapBox(meshSpaceOBB, _nodeBuffer))
            {
                return(false);
            }

            _vertexIndexSet.Clear();
            foreach (var node in _nodeBuffer)
            {
                int          triangleIndex = node.Data.TriangleIndex;
                MeshTriangle triangleInfo  = _mesh.GetTriangle(triangleIndex);
                var          modelVerts    = triangleInfo.Vertices;

                for (int ptIndex = 0; ptIndex < modelVerts.Length; ++ptIndex)
                {
                    int vertIndex = triangleInfo.GetVertIndex(ptIndex);
                    if (_vertexIndexSet.Contains(vertIndex))
                    {
                        continue;
                    }

                    Vector3 modelVert = modelVerts[ptIndex];
                    if (BoxMath.ContainsPoint(modelVert, meshSpaceOBB.Center, meshSpaceOBB.Size, meshSpaceOBB.Rotation))
                    {
                        verts.Add(meshTransform.TransformPoint(modelVert));
                        _vertexIndexSet.Add(vertIndex);
                    }
                }
            }

            return(verts.Count != 0);
        }
 public bool ContainsPoint(Vector3 point)
 {
     return(BoxMath.ContainsPoint(point, _center, _size, Quaternion.identity));
 }
Example #6
0
 public bool ContainsPoint(Vector3 point)
 {
     return(BoxMath.ContainsPoint(point, _center, _size, _rotation, _epsilon));
 }