JavaFX透视旋转

时间:2017-03-23 13:06:21

标签: java javafx

我想知道是否有可能在JavaFX中的正方形上执行透视旋转。当我通常在x轴上旋转它时,我只得到一个压缩的正方形,但是我想用透视来模拟真实的旋转。结果应该看起来像这样

What it should look like

当然取决于学位。有没有办法实现这一点,最好的情况是可以指定一定程度。

以下是压缩代码:

public class HelloWorld extends Application {

    @Override
    public void start(Stage primaryStage) {
        StackPane root = new StackPane();

        Rectangle rectangle = new Rectangle();
        rectangle.setWidth(500);
        rectangle.setHeight(500);
        rectangle.setRotationAxis(Rotate.X_AXIS);
        rectangle.setRotate(50);

        Scene scene = new Scene(root, 1000, 1000);
        root.getChildren().addAll(rectangle);

        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

2 个答案:

答案 0 :(得分:1)

JavaFX支持真正的3D,所以没有必要搞砸这个只是一个效果的PerspectiveTransform。您只需使用PerspectiveCamera设置正确的3D场景,就可以得到您想要的内容。

答案 1 :(得分:1)

defaultScene使用ParallelCamera,但未定义任何视角。因此,x和y坐标的坐标映射实际上与z坐标无关。

要在场景中查看三维效果,请指定PerspectiveCamera

public class HelloWorld extends Application {

    @Override
    public void start(Stage primaryStage) {
        StackPane root = new StackPane();

        Rectangle rectangle = new Rectangle();
        rectangle.setWidth(500);
        rectangle.setHeight(500);
        rectangle.setRotationAxis(Rotate.X_AXIS);
        rectangle.setRotate(50);

        Scene scene = new Scene(root, 1000, 1000);
        scene.setCamera(new PerspectiveCamera());
        root.getChildren().addAll(rectangle);

        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

enter image description here

(如您所见,您的角度计算方向与您想要的角度相反。)

如果需要,您可以进一步配置PerspectiveCamera的属性,例如视野。请参阅documentation