- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试了解和使用ARKit。但是有一件事我无法完全理解。
苹果关于ARAnchor说:
A real-world position and orientation that can be used for placing objects in an AR scene.
ARAnchor
是什么? ARAnchor
是特征点的一部分吗? 最佳答案
更新:2021年1月23日。
TL; DR
anchor ARAnchor
是不可见的空对象,可以将3D模型保持在世界空间中 anchor 的位置。想想ARAnchor
,就像它是模型的带有局部轴的transform node
(您可以对其进行平移,旋转和缩放)一样。每个3D模型都有一个枢轴点,对不对?因此,此枢轴点必须满足ARAnchor
。
如果您未在ARKit
/RealityKit
应用程序中使用 anchor ,则您的3D模型可能会偏离其放置位置,这将极大地影响您应用程序的真实感和用户体验。因此, anchor 是AR场景中的关键元素。
根据ARKit文档2017:
ARAnchor
is a real-world position and orientation that can be used for placing objects in AR Scene. Adding an anchor to the session helps ARKit to optimize world-tracking accuracy in the area around that anchor, so that virtual objects appear to stay in place relative to the real world. If a virtual object moves, remove the corresponding anchor from the old position and add one at the new position.
ARAnchor
是ARKit框架中现有的所有其他 anchor 类型的父类,因此所有这些子类均继承自
ARAnchor
类,但不能直接在您的代码中使用。我还必须说
ARAnchor
和
Feature Points
没有共同点。
Feature Points
是用于成功跟踪和调试的。
ARAnchor
不会自动跟踪真实目标。如果需要自动化,则必须使用
rendered(...)
或
session(...)
实例方法,如果您分别遵守协议(protocol)
ARSCNViewDelegate
或
ARSessionDelegate
,则可以调用这些方法。
ARPlaneAnchor
。因此,如果您想在场景中看到任何 anchor ,则必须使用三个瘦
SCNCylinder
原语“可视化”它。
ARAnchors
添加到场景中:
planeDetection
实例属性为ON
,则ARKit可以将ARPlaneAnchors添加到当前 session 。有时启用的planeDetection
会大大增加场景理解阶段所需的时间。 ARTrackable
协议(protocol))detectionImages
实例属性。在ARKit 2.0中,您总共可以跟踪多达25张图像,在ARKit 3.0和ARKit 4.0中,分别可以跟踪多达100张图像。但是,在两种情况下均为not more than just 4 images simultaneously。 ARTrackable
协议(protocol))ARBodyTrackingConfiguration()
运行 session 来启用 body 跟踪。您将以CG Skeleton的 Root Joint
或在跟踪角色的骨盆位置获得ARBodyAnchor。 ARTrackable
协议(protocol))ARReferenceObject
属性指定detectionObjects
实例。 true
框架中将isCollaborationEnabled
值用于MultipeerConnectivity
实例属性。 100 anchors
甚至更多。这是由于每个分类对象都有其自己的个人 anchor 。每个ARMeshAnchor存储有关相应顶点的数据(八种分类案例之一),其面和顶点法线。 ARTrackable
协议(protocol))ARTrackable
协议(protocol))There are also other regular approaches to create anchors in AR session:
ARHitTestResult
类及其对ARSCNView和ARSKView的命中测试方法,因此您必须习惯射线铸造。 world anchor
一样生成ARKit的AnchorEntity(.world(transform: mtx))
版本。 renderer(_:didAdd:for:)
:
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)
}
AnchorEntity
is an anchor that tethers virtual content to a real-world object in an AR session.
AnchorEntity
的新类。您可以将AnchorEntity用作任何实体层次结构的根点,并且必须将其添加到Scene anchors集合中。 AnchorEntity自动跟踪现实世界的目标。在RealityKit和Reality Composer中,
AnchorEntity
在层次结构的顶部。该 anchor 能够容纳一百个模型,在这种情况下,与为每个模型使用100个个人 anchor 相比,它更稳定。
func makeUIView(context: Context) -> ARView {
let arView = ARView(frame: .zero)
let modelAnchor = try! Experience.loadModel()
arView.scene.anchors.append(modelAnchor)
return arView
}
AnchorEntity
具有三个组成部分:
To find out the difference between
ARAnchor
andAnchorEntity
look at THIS POST.
// Fixed position in the AR scene
AnchorEntity(.world(transform: mtx))
// For body tracking (a.k.a. Motion Capture)
AnchorEntity(.body)
// Pinned to the tracking camera
AnchorEntity(.camera)
// For face tracking (Selfie Camera config)
AnchorEntity(.face)
// For image tracking config
AnchorEntity(.image(group: "Group", name: "model"))
// For object tracking config
AnchorEntity(.object(group: "Group", name: "object"))
// For plane detection with surface classification
AnchorEntity(.plane([.any], classification: [.seat], minimumBounds: [1.0, 1.0]))
// When you use ray-casting
AnchorEntity(raycastResult: myRaycastResult) /* no dot notation */
// When you use ARAnchor with a given identifier
AnchorEntity(.anchor(identifier: uuid))
// Creates anchor entity on a basis of ARAnchor
AnchorEntity(anchor: arAnchor) /* no dot notation */
这是RealityKit 2.0中适用于macOS的仅两种AnchorEntity案例:
// Fixed world position in VR scene
AnchorEntity(.world(transform: mtx))
// Camera transform
AnchorEntity(.camera)
Also it’s not superfluous to say that you can use any subclass of
ARAnchor
forAnchorEntity
needs:
func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
guard let faceAnchor = anchors.first as? ARFaceAnchor
else {
return
}
arView.session.add(anchor: faceAnchor)
let anchor = AnchorEntity(anchor: faceAnchor)
anchor.addChild(model)
arView.scene.anchors.append(anchor)
}
关于swift - ARAnchor到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52893075/
我正在尝试使用新的 ARKit 来替换我拥有的另一个类似的解决方案。真是太棒了!但我似乎无法弄清楚如何以编程方式移动 ARAnchor。我想慢慢地将 anchor 移动到用户的左侧。 在用户前方 2
我正在试验 SpriteKit 和 ARKit,想知道如何计算同一场景中两个 ARAnchor 之间的角度。 这意味着获取 anchor 在世界上的位置并计算它们定义的线与水平面(或另一个任意平面)的
我有一个应用程序使用 ARImageAnchor 来通过相机检测图像。我注意到,虽然场景节点在 3D 空间中的位置会实时更新,但节点的方向(xyz 旋转)可能需要几秒钟才能更新。任何附加的场景节点在更
在将 SCNNode 添加到 ARSCNView 的场景后,我试图获取 anchor 。我的理解是应该自动创建 anchor ,但我似乎无法检索它。 下面是我添加它的方法。该节点保存在一个名为 tes
我在使用 ARSKView 的 ARkit 项目中遇到了障碍。 我想在屏幕上使用点击并创建 ARAnchor 时实现,多个 SKNodes 将从同一个 anchor 弹出。由于我需要单独与每个节点交互
你好,我是使用 ARKit 进行开发的新手,所以这可能是一个基本问题,但我可以将 ARAnchor 附加到移动的物体上,比如打印出来的条形码吗? 我正在尝试开发一个应用程序,其中不同的对象应该显示在不
我目前正在开发 ARKit 2.0 应用程序,用户需要在映射空间周围找到虚拟对象,我使用了 AR Persistence 并且我意识到在初始 ARWorldMap 重新定位后,所有对象都会立即出现,即
When application launched first a vertical surface is detected on one wall than camera focus to the
我正在使用 XCode 9 上的 AR 入门应用,其中 anchor 是在点击场景中创建的: override func touchesBegan(_ touches: Set, with event
我目前正在用 RealityKit 做一些实验。 我一直在查看一些示例代码,我对 ARAnchor 和 AnchorEntity 之间的区别以及何时使用其中一个感到有点困惑. 到目前为止我知道: 两者
在 ARKit 中,我们可以通过 .showFeaturePoints 类型属性可视化在 ARSession 中检测到的 Feature Points' Cloud: self.sceneView.d
这几天我一直在努力解决这个问题。 给定一个基于 ARKit 的应用程序,我可以在其中跟踪用户的面部,我如何才能从它的 anchor 获得面部的绝对旋转? 我可以获得 ARAnchor 的变换,它是一个
如何使 ARNode 指向 ARAnchor? 我想使用 art.scnassets/ship.scn 显示在屏幕中央并指向我刚刚放置在场景中某处的对象。 /// ViewController Cla
问题: 如何创建一个与 ARObjectAnchor.referenceObject 具有相同高度和宽度的新 SKSpriteNode。 上下文: 我目前正在摆弄 ARKit 的新对象检测功能,并且有
我正在使用 WWDC 2018 中推出的 ARKit 2.0 测试 Apple 的多用户 AR 演示应用程序:Creating a multiuser AR experience . 文档说,在每个设
我正在尝试将 ARAnchor 投影到 2D 空间,但我面临方向问题... 在我将左上角、右上角、左下角、右下角位置投影到二维空间的函数下面: /// Returns the projection o
我在我的项目中使用 ARAnchor,我想从这个 anchor 获取位置 (3D)。 代码: sceneView.session.currentFrame?.anchors.first?.transf
我正在使用ARSessionDelegate在 ARView我在其中初始化 ARBodyTrackingConfiguration . session方法 didAdd: [ARAnchor]和 di
我有下一个代码: guard let feauturePoint = frame.hitTest(normalizedPoint, types: .featurePoint).first?.w
我需要将多个不同的 ARWorldMap 实例组合在一起。换句话说,我需要使用 ARWorldMap 的两个(或更多)实例的组合 anchor 创建一个实例。 我可以在整个应用程序中共享同一个实例,但
我是一名优秀的程序员,十分优秀!