JavaFX - 3D 形状

在前面的章节中,我们已经了解了如何在 JavaFX 应用程序中的 XY 平面上绘制 2D 形状。除了这些 2D 形状之外,我们还可以使用 JavaFX 绘制其他几个 3D 形状。

通常,3D 形状是可以在 XYZ 平面上绘制的几何图形。它们由两个或多个维度定义,通常是 length, width and depth。JavaFX 支持的 3D 形状包括 Cylinder、Sphere 和 Box。

上面提到的每个 3D 形状都由一个类表示,所有这些类都属于 javafx.scene.shape 包。名为 Shape3D 的类是 JavaFX 中所有 3 维形状的基类。

创建 3D 形状

要创建 3-Dimensional 形状,需要

实例化相应的类

要创建一个 3-Dimensional 形状,首先你需要实例化它各自的类。例如,如果要创建一个 3D 框,则需要实例化名为 Box 的类,如下所示

java 复制代码
Box box = new Box();

设置形状的属性

实例化类后,需要使用 setter 方法设置形状的属性。

例如,要绘制 3D 框,需要传递其 Width、Height、Depth。您可以使用各自的 setter 方法指定这些值,如下所示

java 复制代码
//Setting the properties of the Box 
box.setWidth(200.0); 
box.setHeight(400.0);   
box.setDepth(200.0);

将 Shape 对象添加到组中

最后,需要通过将形状的对象作为构造函数的参数传递来将其添加到组中,如下所示。

java 复制代码
//Creating a Group object  
Group root = new Group(box);

|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| S.No | 形状和描述 |
| 1 | Box 长方体是具有length (depth), width , and a height . 长方体是具有 length (depth) 、 width 和 height 的三维形状。 在 JavaFX 中,三维框由名为 Box 的类表示。此类属于 javafx.scene.shape 包。 通过实例化此类,可以在 JavaFX 中创建一个 Box 节点。 此类具有 double 数据类型的 3 个属性 width − 框的宽度 height − 框的高度 depth - 框的深度 |
| 2 | Cylinder 圆柱体是一种封闭的实体,具有两个平行(大部分为圆形)的底面,由曲面连接。 它由两个参数描述,即其圆形底面的半径和圆柱体的高度。 在 JavaFX 中,圆柱体由名为 Cylinder 的类表示。此类属于 javafx.scene.shape 包。 通过实例化此类,您可以在 JavaFX 中创建一个圆柱体节点。此类具有 double 数据类型的 2 个属性 height − 圆柱体的高度 radius - 圆柱体的半径 |
| 3 | Sphere 球体定义为与 3D 空间中的给定点的距离相同的点集 r。这个距离 r 是球体的半径,给定的点是球体的中心。 在 JavaFX 中,球体由名为 Sphere 的类表示。此类属于 javafx.scene.shape 包。 通过实例化此类,可以在 JavaFX 中创建一个球体节点。 此类具有名为 radius 的 double 数据类型的属性。它表示 Sphere 的半径。 |

3D 对象的属性

对于所有 3 维对象,可以在 JavaFX 中设置各种属性。它们在下面列出

JavaFX - 创建一个 Box

长方体是三维立体形状。长方体由 6 个矩形组成,这些矩形以直角放置。使用方形面的长方体是立方体,如果面是矩形,而不是立方体,则它看起来像一个鞋盒。

长方体是具有 length (depth)、width 和 height 的三维形状。在 JavaFX 中,这种类型的三维形状被寻址为 Box;因为它可以是长方体或立方体,具体取决于形状的测量值。

在 JavaFX 中,三维框由名为 Box 的类表示。此类属于 javafx.scene.shape 包。通过实例化此类,可以在 JavaFX 中创建一个 Box 节点。

绘制 3D 框的步骤

第 1 步:创建 Box

可以通过实例化名为 BOX 的类在 JavaFX 中创建 Box,该类属于包 javafx.scene.shape 。您可以在 Application 类的 start() 方法中实例化此类,如下所示

java 复制代码
public class ClassName extends Application {  
   @Override     
   public void start(Stage primaryStage) throws Exception {
      //Creating an object of the class Box 
      Box box = new Box();   
   }    
}

第 2 步:将属性设置为框

使用 3D 框各自的 setter 方法设置 3D 框的属性 Width、Height 和 Depth ,如以下代码块所示

java 复制代码
//Setting the properties of the Box 
box.setWidth(200.0); 
box.setHeight(400.0);   
box.setDepth(200.0);

第 3 步:创建 Group 对象

在 start() 方法中,通过实例化名为 Group 的类来创建 group 对象,该类属于包 javafx.scene 。将上一步中创建的 Box(节点)对象作为参数传递给 Group 类的构造函数。为了将其添加到组中,应执行此作,如下所示

java 复制代码
Group root = new Group(box);

第 4 步:启动应用程序

例1

下面是一个使用 JavaFX 生成 3D 框的程序。将此代码保存在名为 BoxExample.java 的文件中。

java 复制代码
import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.shape.Box; 
import javafx.stage.Stage; 
         
public class BoxExample extends Application { 
   @Override 
   public void start(Stage stage) { 
      //Drawing a Box 
      Box box = new Box();  
      
      //Setting the properties of the Box 
      box.setWidth(200.0); 
      box.setHeight(400.0);   
      box.setDepth(200.0); 
         
      //Creating a Group object  
      Group root = new Group(box); 
         
      //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); 
   } 
}

例2

在前面的示例中,我们没有指定要从中绘制框的开始和结束坐标。但是,使用 animation 类的 translateX 和 translateY 属性,我们可以在 JavaFX 应用程序上重新定位该框。让我们看一下下面的示例,并将其保存在名为 TranslateBoxExample.java 的文件中。

java 复制代码
import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.shape.Box;
import javafx.scene.paint.Color;
import javafx.scene.transform.Translate;
import javafx.stage.Stage; 
         
public class TranslateBoxExample extends Application { 
   @Override 
   public void start(Stage stage) { 
      //Drawing a Box 
      Box box = new Box();  
      
      //Setting the properties of the Box 
      box.setWidth(200.0); 
      box.setHeight(200.0);  
      box.setDepth(200.0);

      Translate translate = new Translate();       
      translate.setX(200); 
      translate.setY(150); 
      translate.setZ(25); 
      
      box.getTransforms().addAll(translate);
	  
      //Creating a Group object  
      Group root = new Group(box); 
         
      //Creating a scene object 
      Scene scene = new Scene(root, 400, 300);
	  
      scene.setFill(Color.web("#81c483"));	  
      
      //Setting title to the Stage 
      stage.setTitle("Translate 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); 
   } 
}

JavaFX - 创建圆柱体

圆柱体是一种封闭的实体,具有两个平行(大部分为圆形)的底面,由曲面连接。为了可视化,您可以将 3D 圆柱体视为一堆杂乱的 2D 圆圈,这些圆圈彼此堆叠到一定高度;因此,即使它由两个参数描述,也使其成为三维形状。

绘制 3D 圆柱体的步骤

第 1 步:创建类

通过实例化名为 Cylinder 的类,在 JavaFX 中创建一个 Cylinder 对象,该类属于包 javafx.scene.shape 。您=可以在 start() 方法中实例化此类,如下所示

java 复制代码
public class ClassName extends Application {  
   @Override     
   public void start(Stage primaryStage) throws Exception {
      //Creating an object of the Cylinder class       
      Cylinder cylinder = new Cylinder();   
   }    
}

第 2 步:为 Cylinder 设置属性

java 复制代码
//Setting the properties of the Cylinder 
cylinder.setHeight(300.0f); 
cylinder.setRadius(100.0f); 

第 3 步:创建 Group 对象

java 复制代码
Group root = new Group(cylinder);

第 4 步:启动应用程序

例1

下面的程序演示如何使用 JavaFX 生成 Cylinder。将此代码保存在名为 CylinderExample.java 的文件中。

java 复制代码
import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.shape.CullFace; 
import javafx.scene.shape.Cylinder; 
import javafx.stage.Stage;

public class CylinderExample extends Application { 
   @Override 
   public void start(Stage stage) { 
      //Drawing a Cylinder 
      Cylinder cylinder = new Cylinder(); 
         
      //Setting the properties of the Cylinder 
      cylinder.setHeight(300.0f); 
      cylinder.setRadius(100.0f); 
               
      //Creating a Group object  
      Group root = new Group(cylinder); 
         
      //Creating a scene object 
      Scene scene = new Scene(root, 600, 300);  
      
      //Setting title to the Stage 
      stage.setTitle("Drawing a cylinder"); 
         
      //Adding scene to the stage 
      stage.setScene(scene); 
         
      //Displaying the contents of the stage 
      stage.show(); 
   } 
   public static void main(String args[]){ 
      launch(args); 
   } 
}

例2

还可以对 3D 形状应用转换。在此示例中,我们尝试在 3D 圆柱体上应用平移转换,并在应用程序上重新定位它。将此代码保存在名为 TranslateCylinderExample.java 的文件中。

java 复制代码
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.CullFace;
import javafx.scene.shape.Cylinder;
import javafx.scene.paint.Color;
import javafx.scene.transform.Translate;
import javafx.stage.Stage;

public class TranslateCylinderExample extends Application { 
   @Override 
   public void start(Stage stage) { 
      //Drawing a Cylinder 
      Cylinder cylinder = new Cylinder(); 
         
      //Setting the properties of the Cylinder 
      cylinder.setHeight(150.0f); 
      cylinder.setRadius(100.0f);

      Translate translate = new Translate();       
      translate.setX(200); 
      translate.setY(150); 
      translate.setZ(25); 
      
      cylinder.getTransforms().addAll(translate);	  
               
      //Creating a Group object  
      Group root = new Group(cylinder); 
         
      //Creating a scene object 
      Scene scene = new Scene(root, 400, 300); 
	  
      scene.setFill(Color.web("#81c483"));
      
      //Setting title to the Stage 
      stage.setTitle("Drawing a cylinder"); 
         
      //Adding scene to the stage 
      stage.setScene(scene); 
         
      //Displaying the contents of the stage 
      stage.show(); 
   } 
   public static void main(String args[]){ 
      launch(args); 
   } 
}

JavaFX - 创建球体

绘制 3D 球体的步骤

步骤 1:创建球体

java 复制代码
public class ClassName extends Application { 
  @Override     
   public void start(Stage primaryStage) throws Exception {
      //Creating an object of the class Sphere 
      Sphere sphere = new Sphere();   
   }
}

第 2 步:为球体设置属性

java 复制代码
//Setting the radius of the Sphere 
sphere.setRadius(300.0);

第 3 步:创建 Group 对象

java 复制代码
Group root = new Group(sphere);

第 4 步:启动应用程序

例1

以下程序演示如何使用 JavaFX 生成 Sphere。将此代码保存在名为 SphereExample.java 的文件中

java 复制代码
import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 
import javafx.scene.shape.Sphere; 
         
public class SphereExample extends Application { 
   @Override 
   public void start(Stage stage) { 
      //Drawing a Sphere  
      Sphere sphere = new Sphere();  
      
      //Setting the properties of the Sphere 
      sphere.setRadius(50.0);   
       
      sphere.setTranslateX(200); 
      sphere.setTranslateY(150);      
       
      //Creating a Group object  
      Group root = new Group(sphere); 
         
      //Creating a scene object 
      Scene scene = new Scene(root, 600, 300);  
      
      //Setting title to the Stage 
      stage.setTitle("Drawing a Sphere - draw fill");
      
      //Adding scene to the stage 
      stage.setScene(scene); 
         
      //Displaying the contents of the stage 
      stage.show(); 
   }      
   public static void main(String args[]){ 
      launch(args); 
   } 
}

例2

在下面的程序中,我们通过为 JavaFX 应用程序的场景着色来在 JavaFX 中应用一些 CSS。将此代码保存在名为 CSSSphereExample.java 的文件中

java 复制代码
import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.stage.Stage;
import javafx.scene.paint.Color;
import javafx.scene.shape.Sphere; 
         
public class CSSSphereExample extends Application { 
   @Override 
   public void start(Stage stage) { 
      //Drawing a Sphere  
      Sphere sphere = new Sphere();  
      
      //Setting the properties of the Sphere 
      sphere.setRadius(50.0);   
       
      sphere.setTranslateX(100); 
      sphere.setTranslateY(150);      
       
      //Creating a Group object  
      Group root = new Group(sphere); 
         
      //Creating a scene object 
      Scene scene = new Scene(root, 300, 300);
      
	  scene.setFill(Color.ORANGE);	  
      
      //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); 
   } 
}
相关推荐
潘多编程20 分钟前
解锁Spring Boot 3.1 + JDK 17:分布式系统的变革力量
java·spring boot·后端
北珣.20 分钟前
安装RabbitMQ
java·spring·rabbitmq
广药门徒39 分钟前
用Python替代OpenMV IDE显示openmv USB 图像
开发语言·ide·python
Bluesonli1 小时前
UE5 蓝图学习计划 - Day 8:触发器与交互事件
学习·ue5·虚幻·虚幻引擎·unreal engine
南棱笑笑生1 小时前
20250202本地编译全志R系列的步骤6增加了samba处理项目
开发语言·r语言
成都被卷死的程序员1 小时前
从0开始,来看看怎么去linux排查Java程序故障
java·linux·运维·服务器
LUCIAZZZ1 小时前
模拟实战-用CompletableFuture优化远程RPC调用
java·spring boot·面试·rpc
学问小小谢1 小时前
第21节课:前端构建工具—自动化与模块化的利器
运维·前端·学习·计算机·自动化·电脑·硬件工程
计算机-秋大田2 小时前
基于微信小程序的医院预约挂号系统设计与实现(LW+源码+讲解)
java·spring boot·微信小程序·课程设计
DARLING Zero two♡2 小时前
C++底层学习预备:模板初阶
开发语言·c++·模板