augmented-reality - 如何使用 Reality 套件在屏幕前设置实体?

标签 augmented-reality arkit realitykit

新的现实套件相机变换似乎具有误导性。当我将实体的变换设置为相机的变换时,它不会跟随屏幕的前方,而是始终靠近世界原点。 scnview中曾经有pointOfView。我应该怎么做才能产生相同的效果

最佳答案

如果您希望实体跟随相机并始终位于相机前面,那么最简单的方法是使用 AnchorEntity:

    let box = ModelEntity(
      mesh: MeshResource.generateBox(size: 0.05),
      materials: [SimpleMaterial(color: .red, isMetallic: true)]
    )

    let cameraAnchor = AnchorEntity(.camera)
    cameraAnchor.addChild(box)
    arView.scene.addAnchor(cameraAnchor)

    // Move the box in front of the camera slightly, otherwise
    // it will be centered on the camera position and we will
    // be inside the box and not be able to see it
    box.transform.translation = [0, 0, -0.5]

但是,如果您想使用 cameraTransform 属性,这对我来说似乎很好用:

var c: Cancellable?
var boxAnchor: AnchorEntity?

struct ARViewContainer: UIViewRepresentable {

  func makeUIView(context: Context) -> ARView {

    let arView = ARView(frame: .zero)

    let box = ModelEntity(
      mesh: MeshResource.generateBox(size: 0.05),
      materials: [SimpleMaterial(color: .red, isMetallic: true)]
    )

    boxAnchor = AnchorEntity(world: [0,0,0])
    arView.scene.addAnchor(boxAnchor!)
    boxAnchor!.addChild(box)

    c = arView.scene.subscribe(to: SceneEvents.Update.self) { (event) in
      guard let boxAnchor = boxAnchor else {
        return
      }

      // Translation matrix that moves the box 1m in front of the camera
      let translate = float4x4(
        [1,0,0,0],
        [0,1,0,0],
        [0,0,1,0],
        [0,0,-1,1]
      )

      // Transformed applied right to left
      let finalMatrix = arView.cameraTransform.matrix * translate

      boxAnchor.setTransformMatrix(finalMatrix, relativeTo: nil)

    }

    return arView

  }

    func updateUIView(_ uiView: ARView, context: Context) {}
}

关于augmented-reality - 如何使用 Reality 套件在屏幕前设置实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58355898/

相关文章:

iphone - 如何获取用于测试 iphone layar 应用程序的测试 Layar?

swift - 离开增强现实 View 后删除 _SCNSnapshotWindow

ios - 我可以合并多个透明 SCNShape 对象吗?

ios - 即时将图像添加到 AR 资源以进行图像识别

swift - 如何将 ARHitTestResult "convert"转换为 ARRaycastResult?

swift - 我怎样才能只允许从门户进入我的虚拟场景?

javascript - 增强现实,叠加 3d 模型

ios - 使用基于图像的光照在 3D 模型上应用 PBR 纹理

swift - RealityKit – Material 的 Alpha 透明度

swift - 显示来自网络的现实文件时出错