Is it possible to implement a Billboard System in a volumetric window?

When i call queryDeviceAnchor in my Billboard system I get transform updates but I'm unsure how to process them (similar to the Diorama sample app).

Is it a bug that I recieve these updates? The documentation says that ARKit data is only provided in a full space so I would expect this not to work at all.

But if this is the case, why am I getting deviceAnchor values in this situation?

Replies

Did you ever get to the bottom of this? I'd really like to know the position of the device when in a volumetric window. It seems like this is not possible.

Hey, You can use the WorldProvider to do it:

public struct WorldDataProvider { private let arkitSession = ARKitSession() private let worldTrackingProvider = WorldTrackingProvider()

func setUpSession() {
    Task {
        do {
            try await arkitSession.run([worldTrackingProvider])
        } catch {
            print("Error: \(error)")
        }
    }
}

func getDeviceTransform() -> Transform? {
    guard let deviceAnchor =
            worldTrackingProvider.queryDeviceAnchor(atTimestamp: CACurrentMediaTime())
    else { return nil }
    
    return Transform(matrix: deviceAnchor.originFromAnchorTransform)
}

With that you can get the DeviceAnchor and obtain orientation, position.... You need to start the session before try to get the device position.

More info: https://developer.apple.com/documentation/arkit/worldtrackingprovider