JavaFX 3D(1)真正的3D物件
|
JavaFX 8新增3D功能,與之前JavaFX 2的模擬3D不大一樣,例如新增Shape3D抽象類別,繼承自Shape3D抽象類別的3D物件包括Box, Cylinder, MeshView, Sphere等類別,均為真正的3D物件。 欲執行JavaFX 3D,首先作業系統與瀏覽器須符合JDK 8 Certified System Configurations,可參考此連結,須注意的是JavaFX 8已不支援Windows XP作業系統,若是Windows 7則需SP1以上,此外,系統顯示卡的驅動程式可能也需要更新方可正常執行。 為判斷系統是否支援JavaFX 3D,可使用Platform.isSupported()方法判斷,其參數為ConditionalFeature.SCENE3D,請參考以下程式: // 判斷系統是否支援JavaFX 3D
if (Platform.isSupported(ConditionalFeature.SCENE3D)) {
PhongMaterial phongmaterial = new PhongMaterial();
phongmaterial.setSpecularColor(Color.ORANGE);
phongmaterial.setDiffuseColor(Color.RED);
Box box = new Box(400, 400, 400);
box.setMaterial(phongmaterial);
Group group = new Group();
group.getChildren().add(box);
Scene scene = new Scene(group, 500, 500);
primaryStage.setTitle("Box 3D");
primaryStage.setScene(scene);
primaryStage.show();
}
else {
System.out.println("System can't support Scene 3D.");
System.exit(0);
}
Shape3D抽象類別定義以下屬性:
Shape3D抽象類別提供以下方法:
Box類別用以建立3D方塊,其建構函式如下,分別由width、height與depth設定寬度、高度與深度:
請參考以下範例分別示範以setCullFace()與setDrawMode()方法不同的組合所產生的效果: // 建立Box物件 Box box = new Box(100, 100, 100); // 以Wireframe方式呈現 box.setDrawMode(DrawMode.LINE); // 不省略 box.setCullFace(CullFace.NONE); // 平移Box物件 box.setLayoutX(150); box.setLayoutY(150); ... // 建立Box物件 Box box = new Box(100, 100, 100); // 以Wireframe方式呈現 box.setDrawMode(DrawMode.LINE); // 省略Back Face box.setCullFace(CullFace.BACK); ... // 建立Box物件 Box box = new Box(100, 100, 100); // 以Wireframe方式呈現 box.setDrawMode(DrawMode.LINE); // 省略Front Face box.setCullFace(CullFace.FRONT); ... // 建立Box物件 Box box = new Box(100, 100, 100); // 以填滿方式呈現 box.setDrawMode(DrawMode.FILL); // 省略Back Face box.setCullFace(CullFace.BACK); ... 以下範例示範setMaterial()方法設定物件表面的材質,其中以PhongMaterial類別設定材質的相關顏色: // 建立Box物件 Box box = new Box(100, 100, 100); // 以填滿方式呈現 box.setDrawMode(DrawMode.FILL); // 設定材質 PhongMaterial material = new PhongMaterial(); // Diffuse Color material.setDiffuseColor(Color.YELLOW); // Specular Color material.setSpecularColor(Color.WHITE); // 設定物件表面的材質 box.setMaterial(material); ... 【執行結果】 // 建立Box物件
Box box = new Box(100, 100, 100);
Image image = new Image(
getClass().getResourceAsStream("images/Javafx.png"));
// 設定材質
PhongMaterial material = new PhongMaterial();
// 設定貼圖
material.setDiffuseMap(image);
...
【參考資料】 |

Java 學習之路






