Initial commit for first version of project
This commit is contained in:
47
GasTankAR/Views/TankAR/SessionConfigurationFactory.swift
Normal file
47
GasTankAR/Views/TankAR/SessionConfigurationFactory.swift
Normal file
@ -0,0 +1,47 @@
|
||||
//
|
||||
// SessionConfigurationFactory.swift
|
||||
// GasTankAR
|
||||
//
|
||||
// Created by Dennis Nemec on 26.08.26.
|
||||
//
|
||||
|
||||
import ARKit
|
||||
|
||||
/// Baut die `ARWorldTrackingConfiguration` für den AR-Modus.
|
||||
/// Kapselt die LiDAR-/People-Occlusion-/Image-Detection-Logik an einem Ort.
|
||||
struct SessionConfigurationFactory {
|
||||
let useLiDAR: Bool
|
||||
let referenceImages: Set<ARReferenceImage>
|
||||
|
||||
func make(withImages: Bool, initialWorldMap: ARWorldMap?) -> ARWorldTrackingConfiguration {
|
||||
let config = ARWorldTrackingConfiguration()
|
||||
config.planeDetection = [.horizontal]
|
||||
|
||||
if useLiDAR {
|
||||
if ARWorldTrackingConfiguration.supportsSceneReconstruction(.mesh) {
|
||||
config.sceneReconstruction = .mesh
|
||||
}
|
||||
if ARWorldTrackingConfiguration.supportsFrameSemantics(.sceneDepth) {
|
||||
config.frameSemantics.insert(.sceneDepth)
|
||||
}
|
||||
} else {
|
||||
config.sceneReconstruction = []
|
||||
config.frameSemantics = []
|
||||
}
|
||||
|
||||
// People Occlusion funktioniert auch ohne LiDAR (A12+): Personen zwischen Kamera
|
||||
// und Tank verdecken das Objekt korrekt. (Beliebige Objekte wie Stühle brauchen LiDAR.)
|
||||
if ARWorldTrackingConfiguration.supportsFrameSemantics(.personSegmentationWithDepth) {
|
||||
config.frameSemantics.insert(.personSegmentationWithDepth)
|
||||
}
|
||||
|
||||
if let initialWorldMap {
|
||||
config.initialWorldMap = initialWorldMap
|
||||
}
|
||||
if withImages {
|
||||
config.detectionImages = referenceImages
|
||||
config.maximumNumberOfTrackedImages = 1
|
||||
}
|
||||
return config
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user