
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); ... 【參考資料】 |