【问题标题】:How I resize an object in ARCore?如何在 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中的对象大小

标签: android object augmented-reality 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】:

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

  1. 更改比例值,重新生成 sfb 文件
  2. 将您的节点放入TransformableNode 并让ScaleController 扩展您的模型
  3. 直接使用setLocalScale或setWorldScale
  4. 缩放 .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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-05
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      相关资源
      最近更新 更多