top

JavaFX 3D(2)基本3D物件

分享:

接著上一篇〈JavaFX 3D(1)真正的3D物件〉,本文將繼續介紹JavaFX 3D的基本物件。

首先介紹Cylinder類別。

Cylinder類別用以建立圓柱體,其建構函式如下,分別由heightradius參數設定圓柱體的高度與半徑,此外divisions參數設定圓柱體的分割等分,以產生不同類型的立方柱體:

public Cylinder()
public Cylinder(double radius, double height)
public Cylinder(double radius, double height, int divisions)

Cylinder類別並提供以下方法:

  • getHeight():取得圓柱體的高度。
  • setHeight():設定圓柱體的高度。
  • getRadius():取得圓柱體的半徑。
  • setRadius():設定圓柱體的半徑。
  • getDivisions():取得圓柱體的分割等分。

請參考以下範例分別示範以setCullFace()setDrawMode()方法不同的組合所產生的效果:

// 建立Cylinder物件
Cylinder cylinder = new Cylinder(100, 100); 
// 以Wireframe方式呈現
cylinder.setDrawMode(DrawMode.LINE); 
// 不省略
cylinder.setCullFace(CullFace.NONE); 
// 平移Cylinder物件
cylinder.setLayoutX(150); 
cylinder.setLayoutY(150); 
// 旋轉Cylinder物件
cylinder.getTransforms().add(new Rotate(20,Rotate.X_AXIS));
cylinder.getTransforms().add(new Rotate(10,Rotate.Z_AXIS));
cylinder.getTransforms().add(new Rotate(30,Rotate.Y_AXIS)); 

Group root = new Group(); 
root.getChildren().add(cylinder);
...

【執行結果】
Cylinder
以Wireframe方式呈現並省略Back Face:

// 建立Cylinder物件
Cylinder cylinder = new Cylinder(100, 100); 
// 以Wireframe方式呈現
cylinder.setDrawMode(DrawMode.LINE); 
// 省略Back Face
cylinder.setCullFace(CullFace.BACK); 
...

【執行結果】
Cylinder
以Wireframe方式呈現並省略Front Face:

// 建立Cylinder物件
Cylinder cylinder = new Cylinder(100, 100); 
// 以Wireframe方式呈現
cylinder.setDrawMode(DrawMode.LINE); 
// 省略Front Face
cylinder.setCullFace(CullFace.FRONT); 
...

【執行結果】
Cylinder
以填滿方式呈現並省略Back Face:

// 建立Cylinder物件
Cylinder cylinder = new Cylinder(100, 100); 
// 以填滿方式呈現
cylinder.setDrawMode(DrawMode.FILL); 
// 省略Back Face
cylinder.setCullFace(CullFace.BACK); 
...

【執行結果】
Cylinder
以下範例示範setMaterial()方法設定貼圖:

// 建立Cylinder物件
Cylinder cylinder = new Cylinder(100, 100); 

Image image = new Image(  
  getClass().getResourceAsStream("images/Javafx.png")); 

// 設定材質
PhongMaterial material = new PhongMaterial(); 
// 設定貼圖
material.setDiffuseMap(image);
...

【執行結果】
Cylinder
divisions參數用以設定圓柱體的分割等分,以下是以Cylinder建構函式設定圓柱體的切割為八角柱體 (Octagonal Prism):

// 建立Cylinder物件
Cylinder cylinder = new Cylinder(100, 100, 8); 

Image image = new Image(  
  getClass().getResourceAsStream("images/Javafx.png")); 

// 設定材質
PhongMaterial material = new PhongMaterial(); 
// 設定貼圖
material.setDiffuseMap(image);
...

【執行結果】
Cylinder
接著介紹Sphere類別。

Sphere類別用以建立球體,其建構函式如下,以radius參數設定球體的半徑,此外divisions參數設定球體的分割等分,以產生不同類型的立體:

public Sphere()
public Sphere(double radius)
public Sphere(double radius, int divisions)

Sphere類別並提供以下方法:

  • getRadius():取得球體的半徑。
  • setRadius():設定球體的半徑。
  • getDivisions():取得球體的分割等分。

請參考以下範例分別示範以setCullFace()setDrawMode()方法不同的組合所產生的效果:

// 建立Sphere物件
Sphere sphere = new Sphere(100); 
// 以Wireframe方式呈現
sphere.setDrawMode(DrawMode.LINE); 
// 不省略
sphere.setCullFace(CullFace.NONE); 
// 平移Sphere物件
sphere.setLayoutX(150); 
sphere.setLayoutY(150); 
// 旋轉Sphere物件
sphere.getTransforms().add(new Rotate(20,Rotate.X_AXIS));
sphere.getTransforms().add(new Rotate(10,Rotate.Z_AXIS));
sphere.getTransforms().add(new Rotate(30,Rotate.Y_AXIS)); 

Group root = new Group(); 
root.getChildren().add(sphere);
...

【執行結果】
Sphere
以Wireframe方式呈現並省略Back Face:

// 建立Sphere物件
Sphere sphere = new Sphere(100, 100); 
// 以Wireframe方式呈現
sphere.setDrawMode(DrawMode.LINE); 
// 省略Back Face
sphere.setCullFace(CullFace.BACK); 
...

【執行結果】
Sphere
以Wireframe方式呈現並省略Front Face:

// 建立Sphere物件
Sphere sphere = new Sphere(100, 100); 
// 以Wireframe方式呈現
sphere.setDrawMode(DrawMode.LINE); 
// 省略Front Face
sphere.setCullFace(CullFace.FRONT); 
...

【執行結果】
Sphere
以填滿方式呈現並省略Back Face:

// 建立Sphere物件
Sphere sphere = new Sphere(100, 100); 
// 以填滿方式呈現
sphere.setDrawMode(DrawMode.FILL); 
// 省略Back Face
sphere.setCullFace(CullFace.BACK); 
...

【執行結果】
Sphere

以下範例示範setMaterial()方法設定貼圖:

// 建立Sphere物件
Sphere sphere = new Sphere(100);  
// 以填滿方式呈現
sphere.setDrawMode(DrawMode.FILL); 

Image image = new Image(
  getClass().getResourceAsStream("images/earthmap.jpg"));

// 設定材質
PhongMaterial material = new PhongMaterial(); 
// 設定貼圖
material.setDiffuseMap(image);

// 設定物件表面的材質
sphere.setMaterial(material);
...

【執行結果】
Sphere

divisions參數用以設定球體的分割等分,以下是以Sphere建構函式設定球體的分割等分:

// 建立Sphere物件
Sphere sphere = new Sphere(100, 8);

Image image = new Image(  
  getClass().getResourceAsStream("images/Javafx.png")); 

// 設定材質
PhongMaterial material = new PhongMaterial(); 
// 設定貼圖
material.setDiffuseMap(image);
...

【執行結果】
Sphere

【參考資料】
[1] Java Official Web Site:http://www.oracle.com/technetwork/java/index.html
[2] JavaFX:http://www.oracle.com/technetwork/java/javafx
[3] JavaFX 8.0 API Specification.
[4] Java Platform, Standard Edition 8 API Specification.
[5] JDK 8 Certified System Configurations

分享:
按讚!加入 CodeData Facebook 粉絲群

留言

留言請先。還沒帳號註冊也可以使用FacebookGoogle+登錄留言

關於作者

黃嘉輝副教授,目前任職於國立臺北商業大學企業管理學系,喜歡寫程式,特別愛Java,範例可參考教學網站

熱門論壇文章

熱門技術文章