Javafx 简明教程
JavaFX - Cull Face Property
JavaFX 还为 3D 对象提供了各种属性。这些属性的范围从决定形状的材料:内部和外部、渲染 3D 对象几何、剔除 3D 形状的面。
提供所有这些属性是为了改进 3D 对象的外观和感觉;并检查哪些属性适合应用程序并应用它们。
在本章中,让我们详细了解剔除面属性。
Cull Face Property
通常,剔除是指移除形状中方向不当的部分(在视图区域中不可见)。
剔除面属性的类型为 CullFace ,它表示 3D 形状的剔除面。你可以使用 setCullFace() 方法设置形状的剔除面,如下所示:
box.setCullFace(CullFace.NONE);
形状的描边类型可以是:
-
None − 不执行剔除(CullFace.NONE)。
-
Front - 剔除所有朝向正面的多边形。(CullFace.FRONT)。
-
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 窗口,分别显示两个具有剔除面值 FRONT 和 BACK 的球体,如下所示 -
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 的盒子,如下所示 -