如何正确使用方法setLocaleScale?我在确定 AR 模型的大小时遇到问题



所以,我的问题分为两个层次:

  1. 如何确定增强图像的确切宽度和高度,这是我在AR中显示3D模型的标记? 我通过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. 应该是正确的。但我不确定这些值有多准确。
  2. ViewRenderable 大小是使用 ViewSizer 确定的。默认的ViewSizer是一个DpToMeterViewSizer,它将每个250DP渲染为1米。尝试改用固定宽度的尺寸调整器之一(例如 FixedHeightViewSizer),并保持本地比例不变。

最新更新