手动旋转三维对象-安卓系统



我正在尝试自由旋转一个3D对象,该对象使用SceneView加载而不使用AR。

我希望每当用户在屏幕上滑动时都能进行旋转。

在禁用TranslationContoller的同时启用RotationController和ScaleController并不能解决我的问题。对象仍然无法手动旋转。

我应该如何修改代码以实现360°自由旋转?

如有任何帮助,我们将不胜感激。

以下是我到目前为止的代码

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

为什么不制作一个GestureListener来监听屏幕滑动并获取滑动速度,并使用它为对象设置相对于其当前旋转的新旋转。更多信息。

最新更新