Как правильно использовать метод setLocaleScale?У меня проблемы с определением размера моей модели AR - PullRequest
0 голосов
/ 24 января 2019

Итак, мой вопрос разделен на два уровня:

  1. Как определить точную ширину и высоту дополненного изображения, которое является моим маркером для отображения 3D-моделей в AR?Я получаю эти данные через getExtenzZ и getExtentX, я не знаю, является ли это правильным способом сделать это.

  2. Как правильно масштабировать узел 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 Ответ

0 голосов
/ 13 февраля 2019
  1. Должно быть правильно.Но я не уверен, насколько точны значения.
  2. Размер ViewRenderable определяется с помощью ViewSizer .По умолчанию ViewSizer - DpToMetersViewSizer , который визуализирует каждый 250DP в виде 1 метра.Попробуйте вместо этого использовать один из фиксаторов ширины (например, FixedHeightViewSizer ) и оставьте локальный масштаб без изменений.
...