Я разрабатываю приложение, используя ARCore .В этом приложении мне нужно:
1) разместить объект, всегда находящийся в одной и той же позе в мировом пространстве.Следуя рекомендациям к статье «Работа с якорями» (https://developers.google.com/ar/develop/developer-guides/anchors) Я прикрепляю якорь к ARCore Session . То есть я вообще не использую Trackables.
2) в качестве вторичного реквизита объект должен быть размещен автоматически, то есть без постукивания по экрану.
Мне удалось решить два реквизита, теперь объект «плавает» передо мной, таким образом (очень распространенный код):
private void onSceneUpdate(FrameTime frameTime) {
...
if (_renderable!=null && _anchorNode==null) {
float[] position = {0f,0f,-10f};
float[] rotation = {0,0,0,1};
//
Anchor anchor=_arFragment.getArSceneView().getSession().createAnchor(new Pose(position,rotation));
//
_anchorNode = new AnchorNode(anchor);
_anchorNode.setRenderable(_renderable);
_anchorNode.setParent(_arFragment.getArSceneView().getScene());
_anchorNode.setLocalScale(new Vector3(0.01f,0.01f,0.01f)); //cm -> m
...
}
Поскольку я хочу, чтобы объект находился на полу, мне нужно выяснить, какова высота моей физической камеры (устройства) над полом, вЧтобы вычесть это число из координаты Y текущего объекта:
float[] position = {0f,HERE_THE_VALUE_TO_SUBTRACT_FROM_CAMERA_HEIGHT,-10f};
Конечно, это простая реализация, когда используются плоские Trackables, но здесь у меня есть реквизиты, названные выше.
I 'Нам удалось решить две задачи, теперь объект «плавает» передо мной.
Поскольку я хочу, чтобы объект находился на полу, мне нужно выяснить, какова высота моего физического (устройства).) пришелra над полом, для того чтобы вычесть это число из координаты Y текущего объекта.
Попытка с другой камерой / устройством Позы API поиска, а именно: frame.getAndroidSensorPose () , frame.getCamera (). GetPose () и frame.getCamera (). GetDisplayOrientedPose () показывают недопустимые значения.
Спасибо заВаш совет.
PS: Конечно, это легкая реализация, когда используются отслеживаемые плоскости, но здесь у меня есть другие реквизиты, как указано выше.
РЕДАКТИРОВАТЬпосле комментариев Майкла Дугана.
Что ж, я думаю, что у нас есть два способа получить необходимые реквизиты:
1) оставить код без изменений, продолжая использовать Session Anchor , попросив пользователя запустить приложение и выполнить «процесс калибровки», который устройство на полу.Поскольку это приложение для профессионального использования, а не для потребителя, мы считаем, что оно идеально подходит;
2) продолжайте использовать старые и добрые Trackables с помощьюобычный пол в качестве якоря, включая позу этого якоря при расчете положения 3D-модели.