JavaFX - 3D 形状

embedded/2025/2/3 17:40:25/

在前面的章节中,我们已经了解了如何在 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); } 
}


http://www.ppmy.cn/embedded/159232.html

相关文章

c++ 定点 new 及其汇编解释

&#xff08;1&#xff09; 代码距离&#xff1a; #include <new> // 需要包含这个头文件 #include <iostream>int main() {char buffer[sizeof(int)]; // 分配一个足够大的字符数组作为内存池int* p new(&buffer) int(42); // 使用 placement new…

跨域问题解决实践

在软件开发中&#xff0c;经常会遇到跨域问题&#xff0c;这个问题比较头疼&#xff0c;今天主要介绍下遇到的跨域问题解决思路及如何解决&#xff1f; 1、首先是后端跨域问题 spring boot中的跨域配置如下&#xff1a; Configuration public class WebMvcConfig implements W…

游戏引擎 Unity - Unity 下载与安装

Unity Unity 首次发布于 2005 年&#xff0c;属于 Unity Technologies Unity 使用的开发技术有&#xff1a;C# Unity 的适用平台&#xff1a;PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域&#xff1a;开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…

web前端13--动画

1、动画 语法&#xff1a;两种写法 csskeyframes big{0%{width: 200px;background-color: aqua;}50%{width: 500px;background-color: rgb(111, 255, 0);}100%{width: 300px;background-color: red;}}keyframes big{from{width: 200px;background-color: aqua;}to{width: 500…

Kafka架构

引言 Kafka 凭借其独树一帜的分区架构&#xff0c;在消息中间件领域展现出了卓越的性能表现。其分区架构不仅赋予了 Kafka 强大的并行计算能力&#xff0c;使其能够高效处理海量数据&#xff0c;还显著提升了系统的容灾能力&#xff0c;确保在复杂的运行环境中始终保持稳定可靠…

蓝牙技术在物联网中的应用有哪些

蓝牙技术凭借低功耗、低成本和易于部署的特性&#xff0c;在物联网领域广泛应用&#xff0c;推动了智能家居、工业、医疗、农业等多领域发展。 智能家居&#xff1a;在智能家居系统里&#xff0c;蓝牙技术连接各类设备&#xff0c;像智能门锁、智能灯泡、智能插座、智能窗帘等。…

Epoll编程——流程、易错、关键参数

基本概念 epoll能够管理多个文件描述符&#xff0c;方便服务器对多个链接进行管理。一般来说&#xff0c;一个链接就是一个文件描述符。 设定监听描述符&#xff0c;专门负责所有客户端的TCP连接 int main() { int listen_fd socket(AF_INET,SOCK_STREAM,0); std::cout<…

Linux环境下的Java项目部署技巧:安装 Mysql

查看 myslq 是否安装&#xff1a; rpm -qa|grep mysql 如果已经安装&#xff0c;可执行命令来删除软件包&#xff1a; rpm -e --nodeps 包名 下载 repo 源&#xff1a; http://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm 执行命令安装 rpm 源(根据下载的…