I'm trying to rotate a 3D object freely which loaded using SceneView without AR.
I want the rotation to take place whenever the user swipe on the screen.
Enabling RotationController and ScaleController while keeping TranslationContoller Disabled didn't solve my issue. The object still can't be Rotated manually.
How should I modify my code to enable freely 360° rotation?
Any Help would be really appreciated.
Following is my code till now
SceneView sceneView;
Scene scene;
private TransformationSystem ts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sceneView = findViewById(R.id.scene_view);
scene = sceneView.getScene();
createScene();
}
private void createScene() {
ModelRenderable.builder()
.setSource(this, R.raw.skeleton2 )
.build()
.thenAccept(renderable -> onRenderableLoaded(renderable))
.exceptionally( throwable -> {
Toast toast =
Toast.makeText(this, "Unable to load model", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
return null;
});
}
void onRenderableLoaded(Renderable model) {
ts = new TransformationSystem(getResources().getDisplayMetrics(), new FootprintSelectionVisualizer());
DisplayMetrics displayMetrics= getResources().getDisplayMetrics();
TransformableNode transnode = new TransformableNode(ts);
RotationController rotationController = transnode.getRotationController();
rotationController.setEnabled(true);
ts.selectNode(transnode);
transnode.setRenderable(model);
transnode.setLocalRotation(Quaternion.eulerAngles(new Vector3(-30f,0,0f)));
transnode.getRotationController().setEnabled(true);
transnode.getScaleController().setEnabled(true);
transnode.getTranslationController().setEnabled(false);
scene.addChild(transnode);
transnode.setLocalPosition(new Vector3(0,0,0));
scene.addOnPeekTouchListener(new Scene.OnPeekTouchListener() {
@Override
public void onPeekTouch(HitTestResult hitTestResult, MotionEvent motionEvent) {
ts.onTouch(hitTestResult,motionEvent);
}
});
Camera camera = scene.getCamera();
camera.setLocalPosition(new Vector3(0f,3f,1.5f));
camera.setLocalScale(new Vector3(3f,3f,1.5f));
camera.setLocalRotation(Quaternion.axisAngle(Vector3.right(), -50.0f));
//GesturePointersUtility gesturePointersUtility = new GesturePointersUtility(displayMetrics);
}
@Override
public void onPause() {
super.onPause();
sceneView.pause();
}
@Override
public void onResume() {
super.onResume();
try {
sceneView.resume();
} catch (CameraNotAvailableException e) {
e.printStackTrace();
}
}```
[1]: https://i.stack.imgur.com/fEJV5.png
Why don't you just make a GestureListener that listens for screen swipes and gets the speed of the swipe and use that to set a new rotation for your object with respect to its current rotation. More info .
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.