缩放 AR-Core 中可变形节点的高度和宽度(Ar Fragment)

Scaling height and width of transformable node in AR-Core (Ar Fragment)

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

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

我假设你有一个 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 you can specify a TransformationSystem 时,ScaleControllerTransformationSystem 的一部分,因此您会将重写的 ScaleController 传递给系统。

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

我现在在 PinchGesture 界面上看不清楚你如何获得 Vector3 间隙,而不仅仅是浮动间隙。如果推到推私人领域(startPosition1previousPosition1)可以被读取,但那将是一个黑客。