ARSession 委托方法之间有什么区别?
What's the difference between ARSession delegate methods?
我正在制作一个 Swift 应用程序,该应用程序当前使用 ARImageAnchor
和 ARReferenceImage
将一些简单的形状放置到参考图像上。现在,所有增强内容都放在 session(_:didAdd:)
函数中,但我知道还有一个 session(_:didUpdate:)
函数。 didAdd
版本是有意义的,因为添加锚点时它只是 运行s。但是 Apple 文档对第二个版本的确切用途有点含糊:
func session(ARSession, didUpdate: [ARAnchor])
// Tells the delegate that the session has adjusted
// the properties of one or more anchors.
这是否意味着只要锚点在场景中移动,此函数就会运行?还是“属性”指的不仅仅是锚点的位置?我对第二个函数的用途有点困惑。
前言
我同意你的看法,Apple 的文档通常不清楚。
ARKit and/or RealityKit 应用建立在 运行 ARSession 对象之上,该对象是基于特定 configuration. Each configuration type in ARKit allows you to generate specific (ARPlaneAnchor
、ARImageAnchor
, ARFaceAnchor
, 等等)。在 ARKit 中,我们必须使用显式(手动)配置,而在 RealityKit 中,配置是自动的,因为它是根据 AnchorEntity 类型设置的(.plane
、.image
、.face
, 等等).
可以通过实现 session(...) or renderer(...) 委托方法来跟踪 ARKit 锚点。可以通过每个 ARFrame(每秒 60 帧)访问 ARKit 锚点。
arView.session.currentFrame?.anchors
RealityKit 锚点由应用程序自动(隐式)跟踪。可以通过 对象访问 RealityKit 主播集合。
arView.scene.anchors
ARKit 和 RealityKit 框架可以一起工作,也可以分开工作。 RealityKit 的 AnchorEntity 能够使用 ARKit 的 ARAnchor 变换将模型放置到场景中:
self.anchorEntity = AnchorEntity(anchor: arAnchor)
用例
ARSessionDelegate 协议有 4 个可选的 session(...)
方法,你可以在两个框架中使用。第一对 session(...)
方法经常使用。 session(_:didAdd:)
实例方法用于add
/extract
特定锚点to
/from
特定条件下的ARSession。但是,session(_:didUpdate:)
实例方法允许您根据特定 ARAnchor 的数据更新内容。可以这样实现:
func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
guard let faceAnchor = anchors.first as? ARFaceAnchor
else { return }
self.geometry.update(from: faceAnchor.geometry)
self.facialExpression(anchor: faceAnchor)
}
THIS POST 向您展示了如何同时使用这两种方法。
并阅读 了解如何单独使用 session(_:didUpdate:)
方法。
我正在制作一个 Swift 应用程序,该应用程序当前使用 ARImageAnchor
和 ARReferenceImage
将一些简单的形状放置到参考图像上。现在,所有增强内容都放在 session(_:didAdd:)
函数中,但我知道还有一个 session(_:didUpdate:)
函数。 didAdd
版本是有意义的,因为添加锚点时它只是 运行s。但是 Apple 文档对第二个版本的确切用途有点含糊:
func session(ARSession, didUpdate: [ARAnchor])
// Tells the delegate that the session has adjusted
// the properties of one or more anchors.
这是否意味着只要锚点在场景中移动,此函数就会运行?还是“属性”指的不仅仅是锚点的位置?我对第二个函数的用途有点困惑。
前言
我同意你的看法,Apple 的文档通常不清楚。
ARKit and/or RealityKit 应用建立在 运行 ARSession 对象之上,该对象是基于特定 configuration. Each configuration type in ARKit allows you to generate specific ARPlaneAnchor
、ARImageAnchor
, ARFaceAnchor
, 等等)。在 ARKit 中,我们必须使用显式(手动)配置,而在 RealityKit 中,配置是自动的,因为它是根据 AnchorEntity 类型设置的(.plane
、.image
、.face
, 等等).
可以通过实现 session(...) or renderer(...) 委托方法来跟踪 ARKit 锚点。可以通过每个 ARFrame(每秒 60 帧)访问 ARKit 锚点。
arView.session.currentFrame?.anchors
RealityKit 锚点由应用程序自动(隐式)跟踪。可以通过
arView.scene.anchors
ARKit 和 RealityKit 框架可以一起工作,也可以分开工作。 RealityKit 的 AnchorEntity 能够使用 ARKit 的 ARAnchor 变换将模型放置到场景中:
self.anchorEntity = AnchorEntity(anchor: arAnchor)
用例
ARSessionDelegate 协议有 4 个可选的 session(...)
方法,你可以在两个框架中使用。第一对 session(...)
方法经常使用。 session(_:didAdd:)
实例方法用于add
/extract
特定锚点to
/from
特定条件下的ARSession。但是,session(_:didUpdate:)
实例方法允许您根据特定 ARAnchor 的数据更新内容。可以这样实现:
func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
guard let faceAnchor = anchors.first as? ARFaceAnchor
else { return }
self.geometry.update(from: faceAnchor.geometry)
self.facialExpression(anchor: faceAnchor)
}
THIS POST 向您展示了如何同时使用这两种方法。
并阅读 session(_:didUpdate:)
方法。