Problematically rotate 3D model using Sceneform ecosystem

自古美人都是妖i 提交于 2020-01-14 07:41:31

问题


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,
},

回答1:


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.




回答2:


Not sure if this is what you looking for but try this it looks to me nightmare though it works i have tried it somewhere at the bottom page he will explain to you how to rotate the 3dobject look for this title "Bonus: Make the heart rotate!"

how to do rotatation animation in sceneform




回答3:


I think I can help you (or at least point in a helpful direction). Try:

//Assuming you have created an anchor through hitResult or some other method and have 
//an ArFragment variable "fragment"

ModelRenderable.builder().setSource(context, Uri.parse("your-model.sfb").thenAccept{
   addModel(it, anchor)
   }

fun addModel(model: ModelRenderable, anchor: Anchor){
val aNode = AnchorNode(createAnchor)
val tNode = TransformableNode(fragment.transformationSystem)

//set rotation properties here
tNode.rotationController...
tNode.localRotation...

tNode.setParent(aNode)
fragment.ArSceneView.scene.addChild(aNode)
}

It is quite similar to the above mentioned example. Hope it helps!




回答4:


To avoid Gimbal Lock use a Quaternion rotation. For rotating a 3D object around Z axis clock wise follow this Kotlin code:

override fun onRight(value: Float) {

    objectNode.apply {

        Log.d("Clock Wise", value.toString())

        // XYZ is rotation direction, W component is angle size in degrees 
        rotation = Quaternion.axisAngle(Vector3(0.0f, 0.0f, 1.0f), -45.0f)
    }
}

Hope this helps.



来源:https://stackoverflow.com/questions/51526039/problematically-rotate-3d-model-using-sceneform-ecosystem

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!