繁体   English   中英

手动旋转 3D Object - Android

[英]Manual Rotation of 3D Object - Android

我正在尝试自由旋转使用没有 AR 的 SceneView 加载的 3D object。

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

在保持 TranslationContoller 禁用的同时启用 RotationController 和 ScaleController 并没有解决我的问题。 object 仍然无法手动旋转。

我应该如何修改我的代码以启用自由 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 来监听屏幕滑动并获取滑动速度,并使用它为 object 相对于当前旋转设置新的旋转。 更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM