ARCore – WorldScale 和 LocalScale 有什么区别?

ARCore – What is the difference between WorldScale and LocalScale?

我正在尝试调整 AR 模型的大小,我正在处理建筑物大小的模型。

我设法使用 worldscale 和 localscale 调整了我的模型的大小,但到底有什么区别,我什么时候应该使用 worldscale 来放大我的模型以及什么时候使用 localscale?

局部缩放单个对象

在局部space中,模型上的所有操作(平移、旋转和缩放)都是相对于模型的枢轴点执行的。


官方 Google ARCore 开发者文档 says:

public void setLocalScale (Vector3 scale) 

Sets the scale of this node relative to its parent (local-space). If isTopLevel() is true, then this is the same as setWorldScale(Vector3).

这是它在真实代码中的样子:

Anchor anchor = hitResult.createAnchor();
AnchorNode anchorNode = new AnchorNode(anchor);
anchorNode.setParent(arFragment.getArSceneView().getScene());

TransformableNode n = new TransformableNode(arFragment.getTransformationSystem());
n.setRenderable(modelRenderable);

n.getScaleController().setMinScale(1.74f);
n.getScaleController().setMaxScale(1.75f);

// Set Node's local scale before setting its Parent
n.setLocalScale(new Vector3(1.23f, 1.23f, 1.23f));

n.setParent(anchorNode);


局部缩放多个对象

当多个选定的对象同时在本地缩放时(使用setLocalScale),则每个对象都会相对于其自身轴心点的位置进行缩放。

但是,如果您同时全局缩放所有这些选定对象(使用 setWorldScale),它们将相对于世界的一个结果轴心点进行缩放。


这是本地和世界范围的直观表示:

世界规模:

地方规模: