Search code examples
androidmodelaugmented-realityarcoresceneform

Problematically rotate 3D model using Sceneform ecosystem


I'm using the Sceneform SDK in Android Project.

I have sfb and the sfa objects in my project, and I want the initial rotation of my object to be rotated 90 degrees. How can I achieve it?

I found the next code in these files and I changed the scale.

But I didn't find a way for the rotation.

model: {
  attributes: [
     "Position",
     "TexCoord",
     "Orientation",
  ],
  collision: {},
  file: "sampledata/models/redmixer.obj",
  name: "redmixer",
  scale: 0.010015,
},

Solution

  • I have used setLocalRotation to successfully rotate object for 90 degrees programatically.

          // 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());
    
          //set rotation in direction (x,y,z) in degrees 90
          node.setLocalRotation(Quaternion.axisAngle(new Vector3(1f, 0, 0), 90f));
    
          node.setParent(anchorNode);
          node.setRenderable(renderable);
          node.select();
    

    If you would be interested in more info about Quaternion I recommend: https://proandroiddev.com/arcore-cupcakes-4-understanding-quaternion-rotations-f90703f3966e.

    But basically last parameter is angle in degrees. In this case 90deg -> 90f. By vector you specify direction of the rotation. In example I have rotated in x direction (x,y,z) -> (1f, 0, 0). Hope it helps.