Shape3D

JavaFX 8新增javafx.scene.shape.Shape3D抽象類別,與Shape抽象類別不同,後者主要用於繪製2D圖形如弧形、圓形、橢圓、直線、折線、矩形、文字、多邊形、二次曲線、三次曲線與SVG Path等。而Shape3D抽象類別為JavaFX 3D的基礎類別,以下為繼承自Shape3D抽象類別的3D物體,其中BoxCylinderSphere類別為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.FRONTCullFace.BACKCullFace.NONE,代表省略描繪Front Face、省略描繪Back Face或不省略描繪任何一面。
  • drawMode:定義3D物體的繪製方式,參數值分別為DrawMode.FILLDrawMode.LINE,代表以填滿的方式繪製3D物體或僅以線框(Wireframe)方式呈現。
  • material:定義3D物體表面的材質。

其方法包括:

  • getCullFace():取得省略描繪的一面,方法回傳CullFace.FRONTCullFace.BACKCullFace.NONE參數值,分別代表省略描繪Front Face、省略描繪Back Face或不省略描繪任何一面。
  • setCullFace():設定省略描繪的一面,預設為CullFace.BACK
  • getDrawMode():取得3D物體的繪製方式,方法回傳DrawMode.FILLDrawMode.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);
}

results matching ""

    No results matching ""