如何在ARCore中调整物体大小?

14

我在ArFragment中展示3D模型。因此,我将.obj文件和.mtl文件放在sampledata文件夹中。我右键单击obj文件,选择导入Sceneform资产以添加.sfa/.sfb文件。

这样,当我标记图像时,我就可以展示3D对象,但是对象太大了。

这是我的.sfa文件详细信息。

{
   bound_relative_root: {
      x: 0.5,
      y: 0,
      z: 0.5,
   },
   materials: [
      {
         name: "Material.001",
         parameters: [
            {
               baseColor: null,
            },
            {
               baseColorTint: [
                  0.80000000000000004,
                  0.80000000000000004,
                  0.80000000000000004,
                  1,
               ],
            },
            {
               metallic: 1,
            },
            {
               roughness: 0.120695,
            },
            {
               opacity: null,
            },
         ],
         source: "build/sceneform_sdk/default_materials/obj_material.sfm",
      },
   ],
   model: {
      attributes: [
         "Position",
         "TexCoord",
         "Orientation",
      ],
      collision: {},
      file: "sampledata/dongbaek.obj",
      name: "dongbaek",
      recenter: "root",
      scale: 0.200000
   },
   version: "0.52:1",
}

我认为可以通过缩放部分来调整大小,但我修改值后它并没有改变,仍然是同样的大小。

那么,如何调整3D对象的大小呢?

将3D对象文件添加到.sfa/.sfb文件中是否存在问题?(导入Sceneform资产)

如果您知道,请帮助我。


1
您可以使用 ScaleController 在Scenform ARCore中调整对象的大小。 - Shubham Agrawal
3个回答

14

通过设置最小缩放比例和最大缩放比例值,可以通过缩放控制器来改变对象的缩放比例。在设置父级-锚节点之前,请参阅下面的示例。

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

      // Create the transformable andy and add it to the anchor.
      TransformableNode node = new TransformableNode(arFragment.getTransformationSystem());
// Maxscale must be greater than minscale
        node.getScaleController().setMaxScale(0.02f);
        node.getScaleController().setMinScale(0.01f);

        node.setParent(anchorNode);
        node.setRenderable(renderable);
        node.select();

3
您的答案是正确的,尽管我想补充说明一下,MaxScale必须大于MinScale,否则会出现异常。 - Johana Lopez 1327

3
根据您的项目,可以采用不同的方法:
  1. 更改比例值,重新生成sfb文件
  2. 将节点放入TransformableNode中,并让ScaleController缩放您的模型
  3. 直接使用setLocalScale或setWorldScale
  4. 缩放您的.obj文件,然后生成.sfa和.sfb文件

2

使用以下代码在ARCore中调整模型大小:

TransformationSystem transSys;
transSys = MainActivity.getArFragment().getTransformationSystem();
TransformableNode myNode = new TransformableNode(transSys);

myNode.setLocalScale(new Vector3(0.25f, 0.25f, 0.25f));
myNode.setParent(anchorNode);
//myNode.setParent(sceneView.getScene());
myNode.setRenderable(myModelRenderable);

sceneView.getScene().addChild(node);
myNode.select();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接