javafx透视摄影机:摄影机影响鼠标位置

y1aodyip  于 2021-06-27  发布在  Java
关注(0)|答案(0)|浏览(231)

我有一些代码,里面有一个带有透视摄像头的亚场景。我想要几个eventhandlers,它们在subscene上使用mouseposition。
然而,相机似乎对注册位置有影响。摄影机translatez属性越大,失真越严重。
例如,如果我想拖动场景,第一次拖动会使它跳得很远。
我的相机:

private void setCamera(){
        camera = new PerspectiveCamera(true);
        camera.setNearClip(0.1);
        camera.setFarClip(10000.0);
        camera.setTranslateX(300);
        camera.setTranslateY(350); 
        camera.setTranslateZ(-3000);
        camera.setRotationAxis(Rotate.X_AXIS);
        camera.setRotate(25);
        camera.setFieldOfView(40);
    }

这是我创建亚场景的地方:

private SubScene createMapSubScene(StackPane wrapper){
    double stageWidth = stage.getWidth();
    double stageHeight = stage.getHeight();
    double menuBarHeight = vMenuBar.getHeight();
    mapSubScene = new SubScene(wrapper, stageWidth,stageHeight-menuBarHeight);
    mapSubScene.setCamera(this.getCamera());

    return mapSubScene;
}

这是控制器部分:

game.getMapPane().setOnDragDetected(drag ->{
    System.out.println("DragDetectet");
    game.getMapPane().setOnMousePressed(event -> {
        //Position, an der drag-event gestartet wurde
        paneSourceX = event.getX();
        paneSourceY = event.getY();
        event.consume();
    });

    game.getMapPane().setOnMouseDragged(event ->{
        //Position, an die Maus hingedragged wurde
        double paneTargetX = event.getX();
        double paneTargetY = event.getY();
        game.getMapSubScene().setTranslateX(paneTargetX-paneSourceX);
        game.getMapSubScene().setTranslateY(paneTargetY-paneSourceY);
        event.consume();
    });
}   );

有没有办法让这项工作,或是拖放或其他鼠标控制的操作根本不是一个选项透视相机(我也尝试过使用subscenes节点,这没什么区别)
希望有答案!提前谢谢。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题