Image-Anchor 在visionOS 上如何工作?

问题描述 投票:0回答:1

我正在为visionOS构建一个应用程序,它将文本附加到图像上。我看到有一个我使用的图像 AnchorEntity。问题是附加文本不可见。 我通过日志确认正在运行的 ARKitSession 检测到了正确的图像。

这是正确的做法吗?

这是我的代码:

import Foundation
import SwiftUI
import ARKit
import RealityKit

    struct ImmersiveView: View {
    
        let session = ARKitSession()
        let imageInfo = ImageTrackingProvider(
            referenceImages: ReferenceImage.loadReferenceImages(inGroupNamed: "documentphoto")
        )
        
        var body: some View {
            RealityView { content, attachments in
                let entity = AnchorEntity(.image(group: "documentphoto", name: "Works2"))
                if let text = attachments.entity(for: "Test") {
                    text.position = entity.position
                    entity.addChild(text)
                }
                content.add(entity)
            } update: { content, attachments in
    
            } attachments: {
                Attachment(id: "Test"){
                    Text("Hello World")
                        .tag("Test")
                }
            }.task {
                do {
                    try await session.run([imageInfo])
                    for await update in imageInfo.anchorUpdates {
                        updateImage(update.anchor)
                    }
                } catch let error {
                    print("Error \(error.localizedDescription)")
                }
            }
        }
    }
    
    extension ImmersiveView {
        
        func updateImage(_ anchor: ImageAnchor) {
            let refrenceImage = anchor.referenceImage.name
            print("Reference Image tracked \(refrenceImage ?? "NO_IMAGE")")
        }
        
    }
arkit realitykit visionos vision-pro
1个回答
0
投票

A

RealityView
自动生成锚点(要在 RealityKit 中了解它们,请参阅为 Reality Composer 场景选择锚点)。但您不需要弄乱锚点来标记视图。

对于文本附件,请尝试以下操作:

var body: some View {
        RealityView { content, attachments  in                
            let material = SimpleMaterial(color: .red, isMetallic: true)
            let model = ModelEntity(mesh: myMesh, materials: [material])
            
            content.add(model)
            if let attachment = attachments.entity(for: "name") {
                attachment.position = [0, -0.4, 0]
                content.add(attachment)
            }

        } attachments: {
            Attachment(id: "name") {
                Text("Name of scene")
                    .font(.extraLargeTitle)
            }
            
        }
}
© www.soinside.com 2019 - 2024. All rights reserved.