Найти угол между закрепленным узлом и текущим положением камеры в arcore
Я хочу показать, скажем, Энди, как только начнется отслеживание дуги, и план будет обнаружен. После того, как я закрепил узел где-то поблизости, а затем я отошел от Энди.
У меня есть стрелка внизу экрана. Я хочу повернуть / навести стрелку, когда я отодвигаю камеру, так что стрелка всегда указывает на закрепленный узел.
Я сделал оставшуюся вещь, но не смог найти угол, на который мне нужно продолжать вращать изображение стрелки, чтобы оно всегда указывало на закрепленный узел.
Я использую фреймворк сцены, Arcore SDK в Android Studio.
2 ответа
Ниже приведен код, который я использовал для достижения цели:
Vector3 cameraPosition = arSceneView.getScene().getCamera().getWorldPosition();
Vector3 catPosition = catNode.getWorldPosition();
Vector3 direction = Vector3.subtract(cameraPosition, catPosition);
Quaternion lookRotation = Quaternion.lookRotation(direction, Vector3.up());
catNode.setWorldRotation(lookRotation);
Поэтому, основываясь на ваших комментариях, вы должны сделать пару вещей, я разобью это для вас:
1. Отслеживание положения кошки (точка А)
2. Отслеживать положение камеры (устройства) - это должно быть доступно из ARCore API. (Точка Б)
3. Теперь вам нужно получить направление, учитывая две точки A, B, упомянутые ранее, когда вы вычитаете A из B, вы получаете вектор направления (позже его можно нормализовать для упрощения, и даже вы можете уменьшить его до 2d вектора, а не 3d). Представьте себе это в 2d, если возникли проблемы в 3d.
4. Эта часть является вашим выбором, вы можете вычислить разницу углов или сравнить вращение и решить, как будет выглядеть ваша стрелка / указатель на кошку. Указатель влево / вправо или что-то в стиле компаса, выбор за вами.