Javafx 简明教程

JavaFX - PerspectiveTransform

通常,2D 对象只能在二维平面中绘制,且仅用两个维度进行测量。但是,借助 JavaFX 应用程序,你可以对 2D 对象提供 3D 错觉。这种效果被称为透视变换效果。

透视变换效果将在 Z 轴方向创建透视,使得物体看起来仿佛可以在 XYZ 平面中进行测量,而实际上它只是在 XY 平面中测量。这种效果提供了非仿射变换,其中源对象中线的直线性在输出对象中得到保留。但是,与仿射变换不同,平行性会丢失。

你可以使用 javafx.scene.effect 包中的 PerspectiveTransform 类将这种效果应用于 JavaFX 节点。此类具有以下属性:

  1. input :这种效果的输入。

  2. llx :输出位置的 x 坐标,源的左下角映射到的位置。

  3. lly :输出位置的 y 坐标,源的左下角映射到的位置。

  4. lrx :输出位置的 x 坐标,源的右下角映射到的位置。

  5. lry :输出位置的 y 坐标,源的右下角映射到的位置。

  6. ulx :输出位置的 x 坐标,源的左上角映射到的位置。

  7. uly :输出位置的 y 坐标,源的左上角映射到的位置。

  8. urx − 将源右上角映射到的输出位置的 x 坐标。

  9. ury − 将源右上角映射到的输出位置的 y 坐标。

Example

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.Rectangle;
import javafx.scene.effect.Effect;
import javafx.scene.effect.PerspectiveTransform;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;

public class PerspectiveTransformExample extends Application {
   @Override
   public void start(Stage stage) {
      PerspectiveTransform prst = new PerspectiveTransform();
      prst.setUlx(10.0);
      prst.setUly(10.0);
      prst.setUrx(310.0);
      prst.setUry(40.0);
      prst.setLrx(310.0);
      prst.setLry(60.0);
      prst.setLlx(10.0);
      prst.setLly(90.0);

      Group g = new Group();
      g.setEffect(prst);
      g.setCache(true);

      Rectangle rect = new Rectangle();
      rect.setX(10.0);
      rect.setY(10.0);
      rect.setWidth(280.0);
      rect.setHeight(80.0);
      rect.setFill(Color.BLUE);

      Text text = new Text();
      text.setX(20.0);
      text.setY(65.0);
      text.setText("JavaFX App");
      text.setFill(Color.WHITE);
      text.setFont(Font.font(null, FontWeight.BOLD, 36));

      g.getChildren().addAll(rect, text);

	  //Creating a Group object
      Group root = new Group(g);

      //Creating a scene object
      Scene scene = new Scene(root, 600, 300);

      //Setting title to the Stage
      stage.setTitle("Perspective Transform Effect");

      //Adding scene to the stage
      stage.setScene(scene);

      //Displaying the contents of the stage
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

使用以下命令,从命令提示符编译并执行已保存的 java 文件。

javac --module-path %PATH_TO_FX% --add-modules javafx.controls PerspectiveTransformExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls PerspectiveTransformExample

Output

执行后,上述程序会生成如下所示的 JavaFX 窗口。

perspectivetransform