3D 对象属性

2024 年 8 月 29 日 | 5 分钟阅读

JavaFX 允许我们设置 3D 对象的各种属性。 JavaFX 中为每个属性定义了特殊的类。 在本教程的这一部分中,我们将讨论可以应用于 3D 对象以获得更好外观的属性类型。

剔除面

剔除可以简单地定义为移除 3D 对象在视图区域中不可见的部分的过程。 在 JavaFX 中,3D 形状包含 CullFace 类型的属性。 可以使用以下实例方法将此属性设置为适当的值,该方法需要在 3D 形状类对象上调用。

setCullFace(CullFace value)

CullFace 类中定义了三种类型的笔画,分别是

  1. None: 不执行剔除
  2. Front : 所有面向前的多边形都被剔除
  3. Back : 所有面向后的多边形都被剔除

示例

在以下示例中,我们创建了三个球体,并为每个球体设置了三个剔除面。


JavaFX 3D Object Properties

3D 对象材质

JavaFX 提供了各种可以应用于 3D 形状表面的材质。 包 javafx.scene.paint 的类 Material 提供了处理 3D 形状材质的所有类。 类 PhongMaterial 是类 Material 的子类。 我们只需要实例化这个类来创建所需的材质。

此类提供了各种类型的材质作为此类属性,可以通过使用 setter 方法将这些属性设置为特定值。 但是,可以使用以下方法将材质应用于形状。

性质

javafx.scene.paint.PhongMaterial 的属性及其 setter 方法如下表所述。

属性描述设置器方法
bumpMap此属性是 Image 类型。 这表示材质的凹凸贴图。setBumpMap(Image URL)
diffuseColor这是一个颜色类型属性。 这表示材质的漫反射颜色。setDiffuseColor(Color color)
diffuseMap这是一个 Image 类型属性。 这表示材质的漫反射贴图。setDiffuseMap(Image URL)
selfIlluminationMap这是一个 Image 类型属性。 这表示材质的自发光贴图setSelfIlluminationMap(Image URL)
specularColor这是一个颜色类型属性。 这表示材质的镜面反射颜色。setSpecularColor(Color value)
specularPower这是一个 double 类型属性。 这表示材质的镜面反射强度。setSpecularPower(Double value)

示例


JavaFX 3D Object Properties

绘图模式

JavaFX 提供了各种绘图模式来绘制 3D 形状。 此属性是 DrawMode 类型。 类中定义了以下类型的 DrawMode。

  1. Fill : 此模式绘制并填充 3D 形状。 它由 DrawMode.Fill 表示
  2. Line : 此模式仅使用线条绘制 3D 形状。 它由 DrawMode.Line 表示

使用以下 setter 方法为 3D 形状设置绘图模式。

示例

在以下示例中,我们创建了两个框,一个使用 DrawMode Fill,另一个使用 DrawMode Line。


JavaFX 3D Object Properties

JavaFX 摄像机

在 JavaFX 中,摄像机被视为一个对象,可以在 3D 布局中移动并相应地更改场景的视图。 类 javafx.scene.Camera 表示摄像机。 但是,它与 2D 空间不同,在 2D 空间中我们不需要在屏幕上移动摄像机。

在 JavaFX 摄像机坐标系中,X 坐标指向右侧,Y 坐标指向下方,Z 坐标指向远离观看者或进入屏幕的方向。

为了创建摄像机并将其添加到场景中,我们必须使用以下代码行。

// 创建 javafx.scene.Camera 的实例

// 将摄像机设置为在右侧 X 方向上 50

camera.setTranslateX(50);

// 将摄像机设置为进入屏幕 20

// 将摄像机添加到场景

JavaFX 子场景

子场景节点可以定义为容器,该容器可以容纳场景的某些节点,需要为这些节点指定摄像机角度。 它用于场景分离。 如果我们需要为场景的某一部分设置不同的摄像机,我们可以使用子场景节点。 子场景可以在以下情况之一中使用。

  1. 如果我们需要一个静态摄像机(覆盖层)用于我们在场景中使用的 UI 控件。
  2. 3D 对象使用 Y 轴向上,2D UI 使用 Y 轴向下。
  3. 背景的底图

使用以下语法实例化子场景。


下一主题JavaFX Box