Javafx 简明教程

JavaFX - Cull Face Property

JavaFX 还为 3D 对象提供了各种属性。这些属性的范围从决定形状的材料:内部和外部、渲染 3D 对象几何、剔除 3D 形状的面。

提供所有这些属性是为了改进 3D 对象的外观和感觉;并检查哪些属性适合应用程序并应用它们。

在本章中,让我们详细了解剔除面属性。

Cull Face Property

通常,剔除是指移除形状中方向不当的部分(在视图区域中不可见)。

剔除面属性的类型为 CullFace ,它表示 3D 形状的剔除面。你可以使用 setCullFace() 方法设置形状的剔除面,如下所示:

box.setCullFace(CullFace.NONE);

形状的描边类型可以是:

  1. None − 不执行剔除(CullFace.NONE)。

  2. Front - 剔除所有朝向正面的多边形。(CullFace.FRONT)。

  3. Back - 剔除所有朝向反面的多边形。(StrokeType.BACK)。

默认情况下,三维图形的剔除面是反面。

Example

以下程序演示了球体的各种剔除面的示例。将此代码保存在名为 SphereCullFace.java 的文件中。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.CullFace;
import javafx.stage.Stage;
import javafx.scene.shape.Sphere;

public class SphereCullFace extends Application {
   @Override
   public void start(Stage stage) {
      //Drawing Sphere1
      Sphere sphere1 = new Sphere();

      //Setting the radius of the Sphere
      sphere1.setRadius(50.0);

      //Setting the position of the sphere
      sphere1.setTranslateX(100);
      sphere1.setTranslateY(150);

      //setting the cull face of the sphere to front
      sphere1.setCullFace(CullFace.FRONT);

      //Drawing Sphere2
      Sphere sphere2 = new Sphere();

      //Setting the radius of the Sphere
      sphere2.setRadius(50.0);

      //Setting the position of the sphere
      sphere2.setTranslateX(300);
      sphere2.setTranslateY(150);

      //Setting the cull face of the sphere to back
      sphere2.setCullFace(CullFace.BACK);

      //Creating a Group object
      Group root = new Group(sphere1, sphere2);

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

      //Setting title to the Stage
      stage.setTitle("Drawing a Sphere");

      //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 SphereCullFace.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls SphereCullFace

执行时,以上程序会生成一个 JavaFX 窗口,分别显示两个具有剔除面值 FRONTBACK 的球体,如下所示 -

cull faces

Example

以下程序演示了在盒子上使用 NONE 属性时没有应用剔除面属性的示例。将此代码保存在名为 BoxCullFace.java 的文件中。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.CullFace;
import javafx.stage.Stage;
import javafx.scene.shape.Box;

public class BoxCullFace extends Application {
   @Override
   public void start(Stage stage) {
      //Drawing Box1
      Box box1 = new Box();

      //Setting the dimensions of the Box
      box1.setWidth(100.0);
      box1.setHeight(100.0);
      box1.setDepth(100.0);

      //Setting the position of the box
      box1.setTranslateX(100);
      box1.setTranslateY(150);
      box1.setTranslateZ(0);

      //setting the cull face of the box to NONE
      box1.setCullFace(CullFace.NONE);


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

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

      //Setting title to the Stage
      stage.setTitle("Drawing a Box");

      //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 BoxCullFace.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls BoxCullFace

执行时,以上程序会生成一个 JavaFX 窗口,显示一个具有剔除面值 NONE 的盒子,如下所示 -

box cull face