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.")
}
}
}
}