【问题标题】:Scaling height and width of transformable node in AR-Core (Ar Fragment)AR-Core中可变形节点的缩放高度和宽度(Ar Fragment)
【发布时间】:2020-03-31 12:11:09
【问题描述】:

我目前正在使用AR-Core(Ar 片段),我已经为 ar 片段放置了一个可变形节点,我可以通过捏合手势缩放其 x、y 和 z 坐标。但是这里的问题是改变可变形节点的缩放,它以相等的比例缩放。我想借助捏合手势分别缩放可变形节点的 x、y、z。

例如,如果我在 x 方向上执行手势,那么只有 x 轴应该缩放,在改变 y 方向时,y 轴应该改变。

【问题讨论】:

    标签: android arcore sceneform


    【解决方案1】:

    我假设你有一个TransformableNode,默认情况下ScaleController 会缩放你的模型。 ScaleController 正在收听PinchGesture。它在所有方向上缩放节点,因为它的逻辑被简化并且它只计算一个适用于所有方向的缩放变量:

    https://github.com/google-ar/sceneform-android-sdk/blob/master/sceneformux/ux/src/main/java/com/google/ar/sceneform/ux/ScaleController.java#L111

    @Override
    public void onContinueTransformation(PinchGesture gesture) {
        currentScaleRatio += gesture.gapDeltaInches() * sensitivity;
    
        float finalScaleValue = getFinalScale();
        Vector3 finalScale = new Vector3(finalScaleValue, finalScaleValue, finalScaleValue);
        getTransformableNode().setLocalScale(finalScale);
    
        if (currentScaleRatio < -ELASTIC_RATIO_LIMIT
            || currentScaleRatio > (1.0f + ELASTIC_RATIO_LIMIT)) {
            gesture.cancel();
        }
    }
    

    如您所见,finalScale = new Vector3(finalScaleValue, finalScaleValue, finalScaleValue); 行。我会分拆我自己的ScaleController(通过从内置的ScaleController 继承)来管理xyz 夹在单独的变量中。您需要覆盖 onContinueTransformation 函数并使用 Vector3 currentScaleVectorVector3 finalScaleVector 而不是 float 。然后,当您实例化您的TransformableNode 时,您可以指定一个TransformationSystem,而ScaleController 是该TransformationSystem 的一部分,因此您可以将覆盖的ScaleController 传递给系统。

    scaleController = new ScaleController(this, transformationSystem.getPinchRecognizer());
    addTransformationController(scaleController);
    

    我现在在PinchGesture 界面上看不清楚如何获得Vector3 差距,而不仅仅是浮动差距。如果推送到了,私有字段(startPosition1previousPosition1)可以被读取,但这将是一个 hack。

    【讨论】:

    • 现在,我可以借助带有捏合手势的自定义比例控制器分别更改高度和宽度。为了改变高度,我正在考虑从起始位置的向量 3(捏合手势)开始考虑 x,对于宽度,从向量 3 考虑 y。但是当我尝试从向量 3 更改长度即 z 时,我得到的值对于来自捏合手势的起始位置的向量 3 的 z 始终为零。那么我该如何实现呢?谢谢。
    • 嗨@AbdulWajid 你能指导我完成同样的事情吗?我很难做到。
    猜你喜欢
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2012-06-29
    相关资源
    最近更新 更多