我当前正在使用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。