如何解决手动旋转 3D 对象 - Android
我正在尝试自由旋转一个 3D 对象,该对象使用没有 AR 的 SceneView 加载。
我希望每当用户在屏幕上滑动时进行旋转。
在禁用 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);
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,0f)));
transnode.getRotationController().setEnabled(true);
transnode.getScaleController().setEnabled(true);
transnode.getTranslationController().setEnabled(false);
scene.addChild(transnode);
transnode.setLocalPosition(new Vector3(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,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 来监听屏幕滑动并获取滑动速度,然后使用它来为您的对象设置一个相对于其当前旋转的新旋转。更多info。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。