Shape3D
JavaFX 8新增javafx.scene.shape.Shape3D抽象類別,與Shape抽象類別不同,後者主要用於繪製2D圖形如弧形、圓形、橢圓、直線、折線、矩形、文字、多邊形、二次曲線、三次曲線與SVG Path等。而Shape3D抽象類別為JavaFX 3D的基礎類別,以下為繼承自Shape3D抽象類別的3D物體,其中Box、Cylinder與Sphere類別為JavaFX的基本3D物體,只需透過簡單的參數設定,則可建立3D物體。MeshView類別則是屬於進階的3D物體:
- Box:
javafx.scene.shape.Box類別。 - Cylinder:
javafx.scene.shape.Cylinder類別。 - Mesh View:
javafx.scene.shape.MeshView類別。 - Sphere:
javafx.scene.shape.Sphere類別。
Shape3D抽象類別定義以下屬性:
cullFace:沿用自OpenGL的GL_CULL_FACE屬性。多邊體(Polygon)是由數個面(Facet)所組成,每一個面由數個頂點(Vertex)所設定。在描繪3D物體時,面對鏡頭的一面稱為Front Face、背對鏡頭的一面稱為Back Face,由於描繪3D物體需要大量複雜的計算,因此為增加執行效率,通常會省略描繪背對鏡頭的一面,此功能稱為Cull Face。在OpenGL中,以glCullFace()方法設定是否省略描繪Front Face或Back Face,欲啟用Cull Face功能,則以glEnable(GL_CULL_FACE)方法設定。JavaFX 8的Shape3D抽象類別沿用OpenGL此一功能,以cullFace屬性設定是否省略描繪Front Face或Back Face,參數值分別為CullFace.FRONT、CullFace.BACK或CullFace.NONE,代表省略描繪Front Face、省略描繪Back Face或不省略描繪任何一面。drawMode:定義3D物體的繪製方式,參數值分別為DrawMode.FILL或DrawMode.LINE,代表以填滿的方式繪製3D物體或僅以線框(Wireframe)方式呈現。material:定義3D物體表面的材質。
其方法包括:
getCullFace():取得省略描繪的一面,方法回傳CullFace.FRONT、CullFace.BACK或CullFace.NONE參數值,分別代表省略描繪Front Face、省略描繪Back Face或不省略描繪任何一面。setCullFace():設定省略描繪的一面,預設為CullFace.BACK。getDrawMode():取得3D物體的繪製方式,方法回傳DrawMode.FILL或DrawMode.LINE參數值,分別代表以填滿的方式繪製3D物體或僅以線框方式呈現。setDrawMode():設定3D物體的繪製方式,預設為DrawMode.FILL。getMaterial():取得3D物體表面的材質,預設為null。setMaterial():設定3D物體表面的材質。
JavaFX 3D需要較高的系統需求,欲執行JavaFX 3D,作業系統與瀏覽器必須符合JDK 8 Certified System Configurations,請參考以下網址:
http://www.oracle.com/technetwork/java/javase/certconfig-2095354.html
須注意的是JavaFX 8已再不支援Windows XP作業系統,若是Windows 7則需SP1以上,此外系統顯示卡的驅動程式可能也需要更新方可正常執行。
為判斷系統是否支援JavaFX 3D,可使用Platform.isSupported()方法判斷,其中ConditionalFeature.SCENE3D代表是否支援JavaFX 3D,請參考以下程式:
// 判斷系統是否支援JavaFX 3D
if (Platform.isSupported(ConditionalFeature.SCENE3D)) {
...
}
else {
System.out.println("System can't support Scene 3D.");
System.exit(0);
}