#android #android-studio #augmented-reality #arcore #sceneform
Вопрос:
Я пытаюсь создать приложение, в котором я могу отображать несколько сфер одним касанием на плоскости в определенном макете. Я хочу, чтобы она имела форму определенной молекулы, а сферы были составляющими атомами. Мне нужно, чтобы каждая отдельная сфера была отдельной сущностью (отдельным узлом), чтобы я мог добавлять к ним списки OnTouchListeners и после этого создавать связи между выбранными сферами. Я немного застрял. У кого-нибудь есть идея, как я могу подойти к этому? Я работаю в Android studio с Java и использую ARCore и Sceneform.
Ответ №1:
Вы можете добавлять визуализируемые объекты и привязки при обнаружении события на ленте или при нажатии пользователем кнопки.
Если вы знаете относительные положения, которые вы хотите добавить, вы можете задать положение для каждого добавляемого узла индивидуально, установив перевод позы.
Ниже приведен пример добавления узла в 1 м перед центральной точкой экрана предварительного просмотра:
// Place the anchor 1m in front of the camera.
Frame frame = arFragment.getArSceneView().getArFrame();
Session session = arFragment.getArSceneView().getSession();
Anchor newMarkAnchor = session.createAnchor(
frame.getCamera().getPose()
.compose(Pose.makeTranslation(0, 0, -1f)) //This will place the anchor 1M in front of the camera
.extractTranslation());
AnchorNode addedAnchorNode = new AnchorNode(newMarkAnchor);
addedAnchorNode.setRenderable(andyRenderable);
Вы можете добавить несколько анкерных кодов с различными отображаемыми объектами и применить для каждого из них другой перевод, чтобы расположить его там, где вы хотите.
Документация для Pose.makeTranslation находится здесь: https://developers.google.com/ar/reference/java/com/google/ar/core/Pose#makeTranslation(float, float, float)
Вы можете проверить любое событие касания, чтобы узнать, был ли затронут какой — либо отдельный объект визуализации, а также добавить линии между узлами-см. Этот репозиторий для примера обнаружения прикосновения к объекту визуализации и проведения линии между объектами визуализации:
Обратите внимание, что в вышеупомянутом репозитории использовалась более старая версия Sceneform, которая была устаревшей, но по-прежнему применяются те же принципы.