缩放 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
。它在所有方向缩放节点,因为它的逻辑被简化并且它只计算一个应用于所有方向的缩放变量:
@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 you can specify a TransformationSystem 时,ScaleController
是 TransformationSystem
的一部分,因此您会将重写的 ScaleController 传递给系统。
scaleController = new ScaleController(this, transformationSystem.getPinchRecognizer());
addTransformationController(scaleController);
我现在在 PinchGesture 界面上看不清楚你如何获得 Vector3
间隙,而不仅仅是浮动间隙。如果推到推私人领域(startPosition1
,previousPosition1
)可以被读取,但那将是一个黑客。
我目前正在使用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 you can specify a TransformationSystem 时,ScaleController
是 TransformationSystem
的一部分,因此您会将重写的 ScaleController 传递给系统。
scaleController = new ScaleController(this, transformationSystem.getPinchRecognizer());
addTransformationController(scaleController);
我现在在 PinchGesture 界面上看不清楚你如何获得 Vector3
间隙,而不仅仅是浮动间隙。如果推到推私人领域(startPosition1
,previousPosition1
)可以被读取,但那将是一个黑客。