【发布时间】:2020-03-31 12:11:09
【问题描述】:
我目前正在使用AR-Core(Ar 片段),我已经为 ar 片段放置了一个可变形节点,我可以通过捏合手势缩放其 x、y 和 z 坐标。但是这里的问题是改变可变形节点的缩放,它以相等的比例缩放。我想借助捏合手势分别缩放可变形节点的 x、y、z。
例如,如果我在 x 方向上执行手势,那么只有 x 轴应该缩放,在改变 y 方向时,y 轴应该改变。
【问题讨论】:
我目前正在使用AR-Core(Ar 片段),我已经为 ar 片段放置了一个可变形节点,我可以通过捏合手势缩放其 x、y 和 z 坐标。但是这里的问题是改变可变形节点的缩放,它以相等的比例缩放。我想借助捏合手势分别缩放可变形节点的 x、y、z。
例如,如果我在 x 方向上执行手势,那么只有 x 轴应该缩放,在改变 y 方向时,y 轴应该改变。
【问题讨论】:
我假设你有一个TransformableNode,默认情况下ScaleController 会缩放你的模型。 ScaleController 正在收听PinchGesture。它在所有方向上缩放节点,因为它的逻辑被简化并且它只计算一个适用于所有方向的缩放变量:
@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 继承)来管理x、y、z 夹在单独的变量中。您需要覆盖 onContinueTransformation 函数并使用 Vector3 currentScaleVector 和 Vector3 finalScaleVector 而不是 float 。然后,当您实例化您的TransformableNode 时,您可以指定一个TransformationSystem,而ScaleController 是该TransformationSystem 的一部分,因此您可以将覆盖的ScaleController 传递给系统。
scaleController = new ScaleController(this, transformationSystem.getPinchRecognizer());
addTransformationController(scaleController);
我现在在PinchGesture 界面上看不清楚如何获得Vector3 差距,而不仅仅是浮动差距。如果推送到了,私有字段(startPosition1,previousPosition1)可以被读取,但这将是一个 hack。
【讨论】: