两者都返回现在已知的所有可跟踪曲目吗?
为什么我们需要两者?
何时应该拨打哪一个?
同样的问题适用于Session.getAllAnchors
和Frame.getUpdatedAnchors
。
答案 0 :(得分:2)
全局 Session.getAllTrackables
返回所有已知可跟踪对象的列表。如果启用了平面检测,则此列表将包括Planes
,以及作为对Points
或hitTest(float, float)
的呼叫的副作用而创建的createAnchor(Pose)
。
示例:
planeRenderer.drawPlanes(session.getAllTrackables(Plane.class),
camera.getDisplayOrientedPose(),
projmtx);
如您所见,planeRenderer
类用于绘制平面。它使用.drawPlanes()
方法来渲染ARCore会话已使用视图和投影矩阵标识的任何已标识平面。它将通过呼叫getAllTrackables(Plane.class)
传递所有飞机。
但是本地 Frame.getUpdatedTrackables
返回由返回此update()
的{{1}}更改的特定类型的可跟踪对象。要检索所有更改的可跟踪对象, filterType 可以为Frame
或Trackable.class
或Point.class
。每当屏幕框架更新时,都会触发此方法。
示例:
Plane.class
还有关于private void onUpdateFrame(FrameTime frameTime) {
Frame frame = arSceneView.getArFrame();
Collection updatedAugmentedImages = frame.getUpdatedTrackables(AugmentedImage.class);
}
的几句话:
update()
更新ARCore系统的状态。这包括:接收新的相机框架,更新设备的位置,更新跟踪锚的位置,更新检测到的平面等。此调用可能导致屏幕外OpenGL活动。因此,为避免不必要的帧缓冲区刷新和重新加载,不应在渲染帧或屏幕外缓冲区的中间进行此调用。该调用可以更新所有创建的锚点和检测到的平面的姿态。可通过
public Frame update()
访问更新的对象集。