首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.camera AnchorEntity在哪里?

.camera AnchorEntity在哪里?
EN

Stack Overflow用户
提问于 2020-02-25 17:10:16
回答 1查看 1.7K关注 0票数 4

当将一个孩子添加到我的AnchorEntity(.camera)中时,它似乎是在我的相机后面产卵(这意味着我只有当我转过身时才能看到我的孩子)。我还试图直接添加一个网格到我的锚,但不幸的是,ARKit / RealityKit没有渲染网格时,你在它里面(因为它的中心围绕着相机,理论上总是如此。但是,也可能是因为它总是位于用户所在的屏幕后面,我永远也看不见它)。

另外,奇怪的是,尽管将转换转换设置为(0,0,0,0),子实体并没有与相机AnchorEntity一起移动。

我的两个问题是:

  1. .camera锚实际上是位于物理iPad /照相机所在的位置,还是位于更远的位置(可能是用户通常持有iPad的位置)?
  2. 如何让AnchorEntity(.camera)的子实体在真实空间中移动iPad /照相机?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-26 14:52:44

问题I。.camera锚实际上位于物理iPad / iPhone摄像机所在的位置,还是位于更远的位置(可能是用户通常持有iPad /iPhone的位置)?

第一个问题的答案

在RealityKit和ARKit框架中,ARCamera和其他实体(节点)一样有一个ARCamera,它位于镜头连接到摄像机主体的位置(在刺刀级别)。这个支点可以拴住AnchorEntity(.camera)。换句话说,虚拟相机和现实世界的相机有着大致相同的支点。

因此,如果将RealityKit的AnchorEntity附加到相机的支点,则将其放置到相机刺刀所在的坐标处。这个AnchorEntity(.camera)将被自动跟踪,而不需要实现session(_:didUpdate:)方法。

但是,如果将ARKit的ARAnchor附加到相机的枢轴上,则必须实现session(_:didUpdate:)方法,以不断更新每个ARFrame的定位和定位。

问题2.:当iPad /照相机在真实空间中移动时,如何使AnchorEntity(.camera)的子实体移动?

对第二个问题的答复

如果您想要在60 fps的RealityKit中不断更新模型的位置(当ARCamera移动和旋转时),则需要使用以下方法:

代码语言:javascript
复制
import ARKit
import RealityKit

class ViewController: UIViewController {
    
    @IBOutlet var arView: ARView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let box = MeshResource.generateBox(size: 0.25)            
        let material = SimpleMaterial(color: .systemPink, isMetallic: true)
        let boxEntity = ModelEntity(mesh: box, materials: [material])
        
        let cameraAnchor = AnchorEntity(.camera)       // ARCamera anchor
        cameraAnchor.addChild(boxEntity)
        arView.scene.addAnchor(cameraAnchor)
        
        boxEntity.transform.translation = [0, 0,-1]    // Box offset 1 m
    }
}

...Or您可以在::didUpdate:)方法中实现ARKitcurrentFrame属性:

代码语言:javascript
复制
extension ViewController: ARSessionDelegate {

    func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {

        guard let transform = arView.session.currentFrame?.camera.transform
        else { return }
    
        let arkitAnchor = ARAnchor(transform: transform)
        arView.session.add(anchor: arkitAnchor)            // add to session

        let anchor = AnchorEntity(anchor: arkitAnchor)
        anchor.addChild(boxEntity)
        arView.scene.addAnchor(anchor)                     // add to scene
    }
}

class ViewController: UIViewController {

    @IBOutlet var arView: ARView!
    var boxEntity = ModelEntity(...)

    override func viewDidLoad() {
        super.viewDidLoad()
        arView.session.delegate = self                 // Session's delegate
    }
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60399910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档