swift - 移动时在设备屏幕中心附加球体
问题描述
我正在尝试在设备屏幕的中心附加一个球体,当我围绕球体移动设备时,它应该保持在屏幕的中心(如十字准线)
我在makeUIView函数 sphere_anchor.addChild(modelEntity)中附加了一个球体实体并将其添加到sphere_anchor
但是当我移动我的设备时,球体只是在我移动设备时实体连接到的初始帧中移动。希望有人能指出我这样做的正确方法
//Implement ARSession didUpdate session delegate method
public func session(_ session: ARSession, didUpdate frame: ARFrame) {
let trasnform = frame.camera.transform
if ((self.scene.findEntity(named: "sphere")) != nil) {
let position = simd_make_float3(trasnform.columns.3)
//print(position)
sphere_anchor.position = position
sphere_anchor.orientation = Transform(matrix: trasnform).rotation
}
}
解决方案
试试AnchorEntity(.camera)
。如果您实现它,则不需要session(_:didUpdate:)
实例方法,因为 RealityKit 的锚点会自动跟踪 ARCamera 位置。
@IBOutlet var arView: ARView!
override func viewDidLoad() {
super.viewDidLoad()
let mesh = MeshResource.generateSphere(radius: 0.1)
let sphere = ModelEntity(mesh: mesh)
let anchor = AnchorEntity(.camera)
sphere.setParent(anchor)
arView.scene.addAnchor(anchor)
sphere.transform.translation.z = -0.75
}
AnchorEntity(.camera)
仅在Active Scheme
选择了真正的 iOS 设备时才有效。
推荐阅读
- swift - `none`之间的协议`:AnyObject`有什么区别?
- javascript - JavaScript 垃圾收集器何时以及如何工作
- debian - 搜索成功后 debian apt-get install 失败
- kubernetes - helm 安装后,相关 pod 列表中缺少 SonarQube 应用程序 pod
- python - Kfold,cross_val_score:根据什么数据显示输出(sklearn wrapper)?
- kubernetes - 在使用 Kubernetes 或 Minikube 更新到 Docker for Mac 后保持套接字安全的最佳方法是什么
- android - 无法创建平台 OpenGL 上下文
- php - 仅在 Google Chrome 上出现混合内容问题
- asp.net-core - 从 .net 核心中的 OWIN 获取用户管理器
- javascript - 带有命名空间的 XML 文档中的 Javascript XPath