我有一个示例ARCore代码,其中将Anchor附加到我检测到的每个新可跟踪对象上。我不了解附加这些锚的实用程序,也不了解将多个锚附加到单个Trackable的需要。
我已经签出了文档。我找不到太多的解释。
Collection<AugmentedImage> updatedAugmentedImages =
frame.getUpdatedTrackables(AugmentedImage.class);
// Iterate to update augmentedImageMap, remove elements we cannot draw.
for (AugmentedImage augmentedImage : updatedAugmentedImages) {
switch (augmentedImage.getTrackingState()) {
case PAUSED:
// When an image is in PAUSED state, but the camera is not PAUSED, it has been detected,
// but not yet tracked.
String text = String.format("Detected Image %d", augmentedImage.getIndex());
messageSnackbarHelper.showMessage(this, text);
break;
case TRACKING:
// Have to switch to UI Thread to update View.
this.runOnUiThread(
new Runnable() {
@Override
public void run() {
fitToScanView.setVisibility(View.GONE);
}
});
// Create a new anchor for newly found images.
if (!augmentedImageMap.containsKey(augmentedImage.getIndex())) {
Anchor centerPoseAnchor = augmentedImage.createAnchor(augmentedImage.getCenterPose());
augmentedImageMap.put(
augmentedImage.getIndex(), Pair.create(augmentedImage, centerPoseAnchor));
}
答案 0 :(得分:1)
... 嗨,帕鲁尔,
Anchors用增强的世界映射现实世界,并让您在特定位置查看模型。实际上,锚点是虚拟内容与传感器获取的内容之间的接触点。
我将尝试更好地解释这个概念:
将3D模型放置在某处时,需要根据原点定义模型的位置(x,y,z)和方向。您知道原点在哪里,因为您隐式地创建了这个世界。 每次移动手机且ArCore运行时,手机都会使用传感器(例如Camera,Gyro,Accellerometer等)存储有关您的移动的一些信息,从而在内存中表示您周围的空间(通常是稀疏点云) )。
我怎么能说进入我的虚拟世界的点与手机产生的这个新空间中存在的点相同?我使用锚点。
在您的示例中,该点是计算机视觉算法检测到的参考图像的点。在其上放置一个锚点,假设您放置增强内容的虚拟世界具有对该真实点的引用,并且在移动手机时该内容会显示在正确的位置。
ArCore将根据您的动作更新每一帧的锚,以使内容根据现实世界更加真实。
需要将多个锚点附加到单个可跟踪对象。
通常,您将多个锚定点攻击到一个可跟踪的目标点,以获得更多参考点,并使ArCore减少虚拟世界位置和空间之间的误差。
不必为每个对象创建一个新的锚点。对于具有某种空间关系的模型,使用相同的锚点是一个很好的技巧,同时还要假设这些对象距离不太远。 还要记住,使用和创建锚会消耗手机的已用资源。这可能会导致应用程序性能下降,从而破坏用户体验。
希望这会有所帮助。
干杯。
您还可以参考本文:
https://developers.google.com/ar/develop/developer-guides/anchors
如果您想进一步了解这些技术背后的过程,还请务必检查Visual Inertial Odometry和SLAM。只是谷歌了解更多。
答案 1 :(得分:0)
在ARCore中,有两个关于
Trackable
和Anchor
的简单概念:
Trackable
是ARCore可以跟踪并可以附加到Anchors
的东西。
Anchor
可以为您在空间中的位置保留3D几何形状。
ArAnchor
是一个空对象,当ArSession的跟踪为Renderable
时,可以在世界坐标中保存ON
对象。就像将ArAnchor用作3D对象的局部轴一样。每个3D对象都有一个枢轴点,对不对?因此,此枢轴点必须遇到ArAnchor。
任何3D几何图形(也称为
Renderable
)必须附加到其自己的ArAnchor
。但是一个ArAnchor可以容纳多个3D对象。
阅读Working with anchors了解更多详细信息。
希望这会有所帮助。