JavaFX - 3D 图形
-
简述
在前面的章节中,我们已经看到了如何在 XY 平面上绘制 2D 形状。除了这些 2D 形状之外,我们还可以使用 JavaFX 绘制其他几个 3D 形状。 -
3D形状
通常,3D 形状是可以在 XYZ 平面上绘制的几何图形。这些包括一个Cylinder, Sphere 和一个 Box.上面提到的每个 3D 形状都由一个类表示,所有这些类都属于包 javafx.scene.shape. 类名为Shape3D 是 JavaFX 中所有 3 维形状的基类。 -
创建 3D 形状
要创建 3 维形状,您需要 --
实例化所需 3D 形状的相应类。
-
设置 3D 形状的属性。
-
将 3D 形状对象添加到组中。
实例化相应的类
要创建 3 维形状,首先需要实例化其各自的类。例如,如果要创建一个 3D 框,则需要按如下方式实例化名为 Box 的类 -设置形状的属性
实例化类后,您需要使用 setter 方法设置形状的属性。例如,要绘制一个 3D 框,您需要传递它的 Width、Height、Depth。您可以使用它们各自的 setter 方法指定这些值,如下所示 -将形状对象添加到组
最后,您需要将形状的对象作为构造函数的参数传递给组,如下所示。下表列出了 JavaFX 提供的各种 3D 形状。序号 形状和描述 1 方体 长方体是一个三维形状 length (深度), width, 和 height.在 JavaFX 中,一个三维框由一个名为的类表示 Box. 这个类属于包javafx.scene.shape.通过实例化此类,您可以在 JavaFX 中创建一个 Box 节点。此类具有双数据类型的 3 个属性,即 --
width - 盒子的宽度。
-
height - 盒子的高度。
-
depth - 盒子的深度。
2 圆柱 圆柱体是一个封闭的实体,它有两个平行的(主要是圆形的)底面,通过曲面连接。它由两个参数描述,即 radius 它的圆形底座和 height 气缸的。在 JavaFX 中,圆柱体由名为的类表示 Cylinder. 这个类属于包javafx.scene.shape.通过实例化此类,您可以在 JavaFX 中创建圆柱节点。此类具有双数据类型的 2 个属性,即 --
height - 圆柱体的高度。
-
radius - 圆柱体的半径。
3 球体 球体被定义为与 3D 空间中的给定点距离相同的点集。这个距离 r 是球体的半径,给定的点是球体的中心。在 JavaFX 中,一个球体由一个名为的类表示 Sphere. 这个类属于包javafx.scene.shape.通过实例化此类,您可以在 JavaFX 中创建一个球体节点。这个类有一个名为 radius双数据类型。它代表球体的半径。 -
-
3D 对象的属性
对于所有 3 维对象,您可以设置各种属性,如剔除面、绘图模式、材料。以下部分讨论 3D 对象的属性。剔除面
一般来说,剔除是去除形状中方向不正确的部分(在视图区域中不可见)。剔除面属性的类型为 CullFace它代表 3D 形状的剔除面。您可以使用以下方法设置形状的剔除面setCullFace() 如下图所示 -形状的笔触类型可以是 --
None - 不执行剔除(CullFace.NONE)。
-
Front- 所有正面的多边形都被剔除。(CullFace.FRONT)。
-
Back- 所有背面的多边形都被剔除。(StrokeType.BACK)。
默认情况下,3 维形状的剔除面是后退。例子
以下程序是一个示例,它演示了球体的各种剔除面。将此代码保存在名称为的文件中SphereCullFace.java.使用以下命令从命令提示符编译并执行保存的 Java 文件。执行时,上述程序生成一个 JavaFX 窗口,显示三个具有剔除面值的球体 FRONT, BACK 和 NONE 分别如下 -绘图模式
这是属性的类型 DrawMode它表示用于绘制当前 3D 形状的绘制模式。您可以使用 setDrawMode () 方法选择绘制模式以绘制 3D 形状,如下所示 -在 JavaFX 中,您可以选择两种绘制模式来绘制 3D 形状,它们是 --
Fill − 此模式绘制并填充一个 2D 形状 (DrawMode.FILL)。
-
Line − 此模式使用线条绘制 3D 形状 (DrawMode.LINE)。
默认情况下,3D 形状的绘制模式为填充。例子
以下程序是一个示例,演示了 3D 框的各种绘制模式。将此代码保存在名称为的文件中BoxDrawMode.java.使用以下命令从命令提示符编译并执行保存的 java 文件。执行时,上述程序生成一个 JavaFX 窗口,显示两个绘制模式值分别为 LINE 和 FILL 的框,如下所示 -材料
剔除面属性的类型为 Material它用于选择 3D 形状的材料表面。您可以使用方法设置 3D 形状的材质setCullFace() 如下 -如上所述,对于此方法,您需要传递一个 Material 类型的对象。这PhongMaterial 包的类别 javafx.scene.paint是此类的子类,并提供 7 个表示 Phong 着色材质的属性。您可以使用这些属性的 setter 方法将所有这些类型的材料应用于 3D 形状的表面。以下是 JavaFX 中可用的材料类型 --
bumpMap - 这表示存储为 RGB 图像的法线贴图。
-
diffuseMap - 这代表一个漫反射贴图。
-
selfIlluminationMap - 这表示此 PhongMaterial 的自发光贴图。
-
specularMap - 这表示此 PhongMaterial 的高光贴图。
-
diffuseColor - 这表示此 PhongMaterial 的漫反射颜色。
-
specularColor - 这表示此 PhongMaterial 的镜面颜色。
-
specularPower - 这表示此 PhongMaterial 的镜面反射能力。
默认情况下,3维形状的材质是漫反射颜色为浅灰色的PhongMaterial。例子
以下是在圆柱体上显示各种材料的示例。将此代码保存在名称为的文件中CylinderMaterials.java.使用以下命令从命令提示符编译并执行保存的 java 文件。执行时,上述程序生成一个 JavaFX 窗口,显示 7 个圆柱体,分别包含材质、凹凸贴图、漫反射贴图、自发光贴图、高光贴图、漫反射颜色、高光颜色、(BLANCHEDALMOND) 高光强度,如下图所示- -