Чтобы решить эту проблему, вам нужно установить public Pose getCenterPose()
. Возвращает позу центра обнаруженной плоскости, определенной для начала координат. Преобразованная ось +Y
позы будет иметь нормальную точку вне плоскости, а оси +X
и +Z
ориентируют границы ограничивающего прямоугольника.
anchor = mySession.createAnchor(plane.getCenterPose())
Когда отслеживаемое состояние TRACKING
, эта поза синхронизируется с последним кадром. Когда его отслеживаемое состояние PAUSED
, будет возвращена поза идентификации.
Ваш код может быть следующим:
Anchor newAnchor;
for (Plane plane : mSession.getAllTrackables(Plane.class)) {
if(plane.getType() == Plane.Type.VERTICAL &&
plane.getTrackingState() == TrackingState.TRACKING) {
newAnchor = plane.createAnchor(plane.getCenterPose());
break;
}
}
Еще одна вещь от разработчиков программного обеспечения Google ARCore :
Keep objects close to anchors
.
При закреплении объектов убедитесь, что они находятся рядом с используемым якорем. Старайтесь не размещать объекты дальше, чем на несколько метров от якоря, чтобы предотвратить неожиданное вращательное движение из-за обновлений ARCore в мировых космических координатах.
Если вам нужно разместить объект на расстоянии более нескольких метров от существующего якоря, создайте новый якорь ближе к этому положению и прикрепите объект к новому якору.
Надеюсь, это поможет.