JavaFX 3D(2)基本3D物件
接著上一篇〈JavaFX 3D(1)真正的3D物件〉,本文將繼續介紹JavaFX 3D的基本物件。 首先介紹Cylinder類別。 Cylinder類別用以建立圓柱體,其建構函式如下,分別由height與radius參數設定圓柱體的高度與半徑,此外divisions參數設定圓柱體的分割等分,以產生不同類型的立方柱體: public Cylinder()
請參考以下範例分別示範以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物件 Cylinder cylinder = new Cylinder(100, 100); // 以Wireframe方式呈現 cylinder.setDrawMode(DrawMode.LINE); // 省略Back Face cylinder.setCullFace(CullFace.BACK); ... 【執行結果】 // 建立Cylinder物件 Cylinder cylinder = new Cylinder(100, 100); // 以Wireframe方式呈現 cylinder.setDrawMode(DrawMode.LINE); // 省略Front Face cylinder.setCullFace(CullFace.FRONT); ... // 建立Cylinder物件 Cylinder cylinder = new Cylinder(100, 100); // 以填滿方式呈現 cylinder.setDrawMode(DrawMode.FILL); // 省略Back Face cylinder.setCullFace(CullFace.BACK); ... 【執行結果】 // 建立Cylinder物件
Cylinder cylinder = new Cylinder(100, 100);
Image image = new Image(
getClass().getResourceAsStream("images/Javafx.png"));
// 設定材質
PhongMaterial material = new PhongMaterial();
// 設定貼圖
material.setDiffuseMap(image);
...
【執行結果】 // 建立Cylinder物件
Cylinder cylinder = new Cylinder(100, 100, 8);
Image image = new Image(
getClass().getResourceAsStream("images/Javafx.png"));
// 設定材質
PhongMaterial material = new PhongMaterial();
// 設定貼圖
material.setDiffuseMap(image);
...
Sphere類別用以建立球體,其建構函式如下,以radius參數設定球體的半徑,此外divisions參數設定球體的分割等分,以產生不同類型的立體: public Sphere()
請參考以下範例分別示範以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物件 Sphere sphere = new Sphere(100, 100); // 以Wireframe方式呈現 sphere.setDrawMode(DrawMode.LINE); // 省略Back Face sphere.setCullFace(CullFace.BACK); ... 【執行結果】 // 建立Sphere物件 Sphere sphere = new Sphere(100, 100); // 以Wireframe方式呈現 sphere.setDrawMode(DrawMode.LINE); // 省略Front Face sphere.setCullFace(CullFace.FRONT); ... // 建立Sphere物件 Sphere sphere = new Sphere(100, 100); // 以填滿方式呈現 sphere.setDrawMode(DrawMode.FILL); // 省略Back Face sphere.setCullFace(CullFace.BACK); ... 以下範例示範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);
...
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);
...
【參考資料】 |