如何在 ARCore 中调整对象的大小?

Posted

技术标签:

【中文标题】如何在 ARCore 中调整对象的大小?【英文标题】:How I resize an object in ARCore? 【发布时间】:2019-03-15 03:38:13 【问题描述】:

我在 ArFragment 中显示 3D 对象。所以我把 .obj 文件和 .mtl 文件放在 sampledata 文件夹中。然后我右键单击 obj 文件,然后选择 Import Sceneform Asset 以添加 .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 资源)

如果你知道,请帮助我。

【问题讨论】:

可以使用ScaleController调整scenform arcore中的对象大小 【参考方案1】:

对象缩放由缩放控制器更改。通过设置 minScale 和 maxScale 值。在设置父-锚节点之前。请参阅下面的示例。

      // 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();

【讨论】:

你的答案是正确的,虽然我会补充说 MaxScale 必须大于 MinScale,因为那样你会得到一个例外。【参考方案2】:

根据您的项目采用不同的方法:

    更改比例值,重新生成 sfb 文件 将您的节点放入TransformableNode 并让ScaleController 扩展您的模型 直接使用setLocalScale或setWorldScale 缩放 .obj 文件,然后生成 .sfa 和 .sfb 文件

【讨论】:

【参考方案3】:

使用以下代码在 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();

【讨论】:

以上是关于如何在 ARCore 中调整对象的大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ARCore Android 中禁用表面检测

ARCore – 如何在没有任何特征点的情况下在墙壁等表面上放置/创建对象?

ARcore:如何围绕 Y 轴旋转对象?

ARCore - 如何将特定对象位置添加到ARAnchor?

opengl:调整大小时如何将对象保留在窗口中

如何在 xcode 自动布局中使对象自动调整大小?