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

问题描述 投票:0回答:1

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

例如,如果我在x方向上执行手势,则仅x轴应缩放,而在改变y方向时y轴应改变。

android arcore sceneform
1个回答
0
投票

我假设您有一个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。

© www.soinside.com 2019 - 2024. All rights reserved.