web-dev-qa-db-fra.com

Comment redimensionner un objet dans ARCore?

Je montre l'objet 3D dans ArFragment. J'ai donc mis le fichier .obj et le fichier .mtl dans le dossier sampledata. Et je fais un clic droit sur le fichier obj et sélectionnez Importer le fichier Sceneform Asset pour ajouter le fichier .sfa/.sfb.

Je peux donc montrer l'objet 3D lorsque je marque l'image, mais l'objet est trop grand.

Ceci est mon détail de fichier .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",
}

Je pense qu'il peut être redimensionné par partie d'échelle, mais je change la valeur, cela ne change pas. même taille

Alors, comment puis-je redimensionner un objet 3D?

Y a-t-il un problème lors de l'ajout d'un fichier d'objet 3D pour créer un fichier .sfa/.sfb? (Importer un élément Sceneform)

Si vous le savez, aidez-moi.

9
Polaris Nation

La mise à l'échelle des objets est modifiée par le contrôleur d'échelle. En définissant la valeur minScale et maxScale. Avant de définir le parent - nœud d'ancrage. Voir l'exemple ci-dessous.

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

        node.getScaleController().setMaxScale(0.01f);
        node.getScaleController().setMinScale(0.01f);

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

Différentes approches selon votre projet:

  1. Modifiez la valeur d'échelle, régénérez vos fichiers sfb
  2. Mettez votre nœud dans un TransformableNode et laissez ScaleController mettre à l'échelle votre modèle
  3. Utilisez directement setLocalScale ou setWorldScale
  4. Mettez à l'échelle votre fichier .obj, puis générez les fichiers .sfa et .sfb
2
ManuelTS

tilisez le code suivant pour redimensionner votre modèle dans 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();
1
ARGeo