JavaFX - 剔除面属性



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

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

在本章中,让我们进一步了解剔除面属性。

剔除面属性

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

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

box.setCullFace(CullFace.NONE);

形状的笔触类型可以是:

  • None - 不执行剔除 (CullFace.NONE)。

  • Front - 剔除所有正面多边形 (CullFace.FRONT)。

  • Back - 剔除所有背面多边形 (StrokeType.BACK)。

默认情况下,三维形状的剔除面为 Back。

示例

以下程序是一个示例,演示了球体的各种剔除面。将此代码保存在名为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

示例

以下程序是一个示例,演示了在长方体上使用 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,如下所示:

Cull Faces
广告