How can I check if one Entity is inside another Entity?

Viewed 15

I have a massive grid of two ModelEntites (50%-50%) within an Entity that was loaded from a file (100mx100m).

My goal is to track when the ARCamera when the camera is inside each of the grid sections (1 - 100x50, 2 - 100x50).

The cameraAnchorEntity is attached to my camera and with it, I can visualize an object (with distance) with it I tried collision detection.

Code:

// MARK: - ARSessionDelegate.

public func session(_ session: ARSession, didUpdate frame: ARFrame) {

    guard let view = self.arView else { return }
    
    if let cameraAnchorEntity = self.cameraAnchorEntity {
        
        let distance: Float = 0.0
        let translate = float4x4(
              [distance,0,0,0],
              [0,distance,0,0],
              [0,0,distance,0],
              [0,0,-distance,distance]
            )
        let finalMatrix = view.cameraTransform.matrix * translate
        cameraAnchorEntity.setTransformMatrix(finalMatrix, relativeTo: nil)
        
        if let selectedModelUUID = selectedModelUUID,
            let modelComponent = self.modelMapper.getModelContainer(for: selectedModelUUID),
            let gridAEntity = modelComponent.gridAEntity,
            let gridBEntity = modelComponent.gridBEntity
        {
            let gridAEntityBBox = gridAEntity.model?.mesh.bounds
            let gridBEntityBBox = gridBEntity.model?.mesh.bounds
            
            let innerConversion = gridAEntity.convert(position: cameraAnchorEntity.position, from: gridAEntity)
            let outerConversion = gridBEntity.convert(position: cameraAnchorEntity.position, from: gridBEntity)
            if let e = gridAEntityBBox, e.contains(innerConversion) {
                print("\tCamera is inside gridA.")
            } else {
                print("\t\tCamera is NOT inside gridA")
            }
            if let e = gridBEntityBBox, e.contains(outerConversion) {
                print("\tCamera is inside gridB")
            } else {
                print("\t\tCamera is NOT inside gridB.")
            }

        }
    }
}  
0 Answers
Related