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);
}