作者:不想与你见面_637 | 来源:互联网 | 2022-12-01 19:43
1> ARGeo..:
只是说 ARAnchor
是一个看不见的空对象,可以在世界空间中保存3D内容(在锚点位置)。可以将ARAnchor
其视为3D对象的局部轴。每个3D对象都有一个枢轴点,对不对?因此,此枢轴点必须满足ARAnchor
。
如 Apple文档所述:
ARAnchor
是现实世界中的位置和方向,可用于在AR Scene中放置对象。在会话中添加锚点有助于ARKit优化该锚点周围区域的世界跟踪准确性,从而使虚拟对象看起来相对于真实世界保持原位。如果虚拟对象移动,请从旧位置移除相应的锚,然后在新位置添加一个。
ARAnchor
是ARKit框架中存在的所有其他类型锚的父类,因此所有这些子类均继承自ARAnchor
该类。
这是带有平面锚的可视表示的图像。但请记住:默认情况下,您看不到检测到的飞机或其ARPlaneAnchor。
在ARKit 3.0中,您可以ARAnchors
使用不同的场景添加到场景中:
ARPlaneAnchor
如果水平或/和垂直planeDetection
实例属性为ON
,则ARKit可以将ARPlaneAnchors添加到会话中。
ARImageAnchor
这种锚点包含有关在AR世界跟踪会话中检测到的图像(锚点位于图像中心)的位置和方向的信息。对于激活,请使用detectionImages
实例属性。在ARKit 2.0中,您最多可以跟踪多达25张图像,在ARKit 3.0中,分别最多可以跟踪100张图像。但是,在两种情况下,最多只能同时显示4张图像。
ARBodyAnchor
在最新版本的ARKit中,您可以通过运行会话来启用身体跟踪ARBodyTrackingConfiguration()
。您将在Root Joint
3D Skeleton中获得ARBodyAnchor 。
ARFace锚
Face Anchor存储有关拓扑和姿势的信息以及您可以使用前置TrueDepth摄像机检测到的面部表情。当检测到脸部时,“脸部固定点”将附加在鼻子后面的脸部中央。在ARKit 2.0中,您只能跟踪一张脸,而在ARKit 3.0中,最多可以同时跟踪3张脸。
ARObjectAnchor
这种类型的锚点保存有关在世界跟踪会话中检测到的真实3D对象的6个自由度(位置和方向)的信息。
AREnvironmentProbeAnchor
Probe Anchor在世界跟踪会议中为特定空间区域提供环境照明信息。ARKit的人工智能使用它为金属着色器提供环境反射。
ARParticipantAnchor
对于多用户AR体验而言,这是必不可少的锚类型。如果要使用它,请true
为isCollaborationEnabled
实例属性和Multipeer Connectivity
框架使用值。
还有其他常规方法可以在AR会话中创建锚点:
命中测试法
在屏幕上点击,将一个点投影到一个隐藏的检测平面上,将ARAnchor放置在虚拟射线与该平面相交的位置。
射线投射法
轻击屏幕,还将点投影到隐藏的检测平面上。射线投射与命中测试的主要区别在于,在使用后者的ARKit时,由于它会更多地了解检测到的表面,因此会不断完善射线投射。
特征点
ARKit在现实对象的高对比度边缘上自动生成的特殊黄点,可以为您提供放置ARAnchor的位置。由于采用了命中测试方法,因此这种方法也是可行的。
ARCamera的转型
iPhone相机的位置和方向(矩阵4x4)可以轻松用作ARAnchor的位置。
任何世界立场
将ARAnchor放置在所需场景中的任何位置。
下面是代码片段,如何在renderer方法内实现锚点:
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
guard let planeAnchor = anchor as? ARPlaneAnchor else { return }
let grid = Grid(anchor: planeAnchor)
node.addChildNode(grid)
}
自2019年RealityKit发布以来,您可以使用其新类AnchorEntity
。使用AnchorEntity类作为实体层次结构的根点,并将其添加到Scene实例的anchors集合中。这使ARKit可以将锚实体及其所有层次后代放置到现实世界中。
AnchorEntity
内部存储三个组件:
转变组件
同步化组件
锚固组件
为了找出两者之间的区别ARAnchor
,AnchorEntity
请看这篇文章。