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, OOBB collectOOBB) { var spriteWorldVerts = sprite.GetWorldVerts(spriteTransform); var collectedVerts = new List <Vector3>(7); foreach (var vertPos in spriteWorldVerts) { if (BoxMath.ContainsPoint(vertPos, collectOOBB.Center, collectOOBB.Size, collectOOBB.Rotation)) { collectedVerts.Add(vertPos); } } return(collectedVerts); }
public List <Vector3> OverlapVerts(OOBB oobb, MeshTransform meshTransform) { if (!_isBuilt) { Build(); } OOBB meshSpaceOOBB = meshTransform.InverseTransformOOBB(oobb); HashSet <int> usedIndices = new HashSet <int>(); var overlappedNodes = _tree.OverlapBox(meshSpaceOOBB); 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, meshSpaceOOBB.Center, meshSpaceOOBB.Size, meshSpaceOOBB.Rotation)) { overlappedVerts.Add(meshTransform.TransformPoint(modelVert)); usedIndices.Add(vertIndex); } } } return(overlappedVerts); }
public bool ContainsPoint(Vector3 point) { return(BoxMath.ContainsPoint(point, _center, _size, Quaternion.identity)); }