Я пытаюсь разработать тестовое приложение AR с ARKit, используя RoboVM. После настройки сеанса с помощью ARWorldTrackingConfiguration и его запуска я хотел бы определить положение на обнаруженной горизонтальной плоскости (полу), выполнив тест попадания следующим образом:
public void addTapGestureToSceneView(){
UITapGestureRecognizer uiTapGestureRec = new UITapGestureRecognizer();
uiTapGestureRec.addListener(new UIGestureRecognizer.OnGestureListener() {
@Override
public void onGesture(UIGestureRecognizer uiGestureRecognizer) {
CGPoint tapLocation = uiGestureRecognizer.getLocationInView(arView);
NSArray<ARHitTestResult> hitTestResults = arView.hitTest(tapLocation, ARHitTestResultType.FeaturePoint);
if(!hitTestResults.isEmpty()) {
VectorFloat3 vec3 = getTranslation(hitTestResults.last().getWorldTransform());
addBox(vec3);
}
}
});
arView.addGestureRecognizer(uiTapGestureRec);
}
(getTranslation(...)
- вспомогательный метод, извлекающий третий столбец матрицы преобразования)
В addBox(VectorFloat3 position)
добавлен узел с геометрией ящика.
Проблема в том, что это всегда возвращает координаты теста попадания со всеми тремя компонентами, близкими к нулю (например, x * 10 ^ -35), поэтому поле добавляется почти в центре телефона, с которым я тестирую это приложение.
Что-то не так с моей реализацией или это может быть ошибка в RoboVM?
Обновление:
Проблема решена в новой версии RoboVM.
См. Запрос на выдачу: https://github.com/MobiVM/robovm/pull/339
и: https://dkimitsa.github.io/2018/12/11/vector-data-types/