Как правильно использовать метод setLocaleScale? У меня проблемы с определением размера моей модели AR
Итак, мой вопрос разделен на два уровня:
Как определить точную ширину и высоту дополненного изображения, которое является моим маркером для отображения 3D-моделей в AR? Я получаю эти данные через getExtenzZ и getExtentX, я не знаю, является ли это правильным способом сделать это.
Как правильно масштабировать узел ViewRenderable, чтобы он имел ширину и высоту изображения? В моем случае демонстрируемая модель всегда больше, чем должна, так что я думаю, что во время процесса срыва должно быть что-то, что я пропускаю...
private void onUpdateFrame(FrameTime frameTime) { Frame frame = arFragment.getArSceneView().getArFrame(); Collection<AugmentedImage> augmentedImages = frame.getUpdatedTrackables(AugmentedImage.class); for (AugmentedImage augmentedImage : augmentedImages) { if (augmentedImage.getTrackingState() == TrackingState.TRACKING) { if (augmentedImage.getName().equals("painting") && shouldAddModel) { width = augmentedImage.getExtentX(); height = augmentedImage.getExtentZ(); placeImageView(arFragment,augmentedImage.createAnchor(augmentedImage.getCenterPose())); shouldAddModel = false; } } }
}
private void placeImageView(ArFragment arFragment, Anchor anchor){ CompletableFuture<Void> renderableFuture = ViewRenderable.builder() .setView(arFragment.getContext(),R.layout.painting_module) .setVerticalAlignment(ViewRenderable.VerticalAlignment.CENTER) .build() .thenAccept(renderable -> { ImageView imageView = (ImageView) renderable.getView(); AnchorNode anchorNode = new AnchorNode(anchor); anchorNode.setParent(arFragment.getArSceneView().getScene()); TransformableNode transNode = new TransformableNode(arFragment.getTransformationSystem()); transNode.setRenderable(renderable); transNode.getScaleController().setMinScale(0.01f); transNode.getScaleController().setMaxScale(2.0f); transNode.setLocalScale(new Vector3(width,0,height)); transNode.setLocalPosition(new Vector3(0,0.00f,0)); transNode.setLocalRotation(Quaternion.axisAngle(new Vector3(1,0,0),-90)); transNode.setParent(anchorNode); transNode.select(); });
}
На мой взгляд, проблема в камере и в том, что она неправильно вычисляет точные значения w и h увеличенного изображения, но, может быть, кто-то может дать мне какую-нибудь подсказку? ниже эффекта до сих пор:
1 ответ
- Должно быть правильно. Но я не уверен, насколько точны значения.
- Размер ViewRenderable определяется с помощью ViewSizer. По умолчанию ViewSizer - это DpToMetersViewSizer, который визуализирует каждый 250DP как 1 метр. Попробуйте вместо этого использовать один из фиксаторов ширины (например, FixedHeightViewSizer) и не трогайте локальный масштаб.