ドキュメント



JavaFX: JavaFXグラフィックスの操作

2 Shape3D

この章では、JavaFX 3Dグラフィックス・ライブラリで使用できるShape3D APIについて説明します。

次の2つのタイプの3D図形があります。

事前定義図形

すぐに使用できる3Dオブジェクトの迅速な作成を容易にするために、事前定義された3D図形が提供されています。このような図形には、ボックス、円筒および球体があります。図2-1に、使用例を示します。

図2-1 事前定義図形

図2-1の説明が続きます
「図2-1 事前定義図形」の説明

例2-1に、Shape3Dのクラス階層を示します。これには、指定された3Dメッシュ・データで面を定義するMeshViewクラスが含まれています。また、BoxCylinderおよびSphereサブクラスも含まれています。

例2-1 Shape3Dのクラス階層

java.lang.Object
  javafx.scene.Node
     javafx.scene.shape.Shape3D
        javafx.scene.shape.MeshView
        javafx.scene.shape.Box
        javafx.scene.shape.Cylinder
        javafx.scene.shape.Sphere

次の情報を使用して、事前定義図形を作成します。

  • Boxオブジェクトを作成するには、幅、高さおよび奥行きのディメンションを指定します。

    Box myBox = new Box(width, height, depth);
    
  • Cylinderオブジェクトを作成するには、半径および高さを指定します。

    Cylinder myCylinder = new Cylinder(radius, height);
    Cylinder myCylinder2 = new Cylinder(radius, height, divisions);
    
  • Sphereオブジェクトを作成するには、半径を指定します。

    Sphere mySphere = new Sphere(radius);
    Sphere mySphere2 = new Sphere(radius, divisions);
    

例2-2に、事前定義された3D図形の使用を示すコード行を示します。

例2-2 事前定義された3D図形の使用例

...
       final PhongMaterial redMaterial = new PhongMaterial();
       redMaterial.setSpecularColor(Color.ORANGE);
       redMaterial.setDiffuseColor(Color.RED);
 
       final PhongMaterial blueMaterial = new PhongMaterial();
       blueMaterial.setDiffuseColor(Color.BLUE);
       blueMaterial.setSpecularColor(Color.LIGHTBLUE);

       final PhongMaterial greyMaterial = new PhongMaterial();
       greyMaterial.setDiffuseColor(Color.DARKGREY);
       greyMaterial.setSpecularColor(Color.GREY);

       final Box red = new Box(400, 400, 400);
       red.setMaterial(redMaterial);
 
       final Sphere blue = new Sphere(200);
       blue.setMaterial(blueMaterial);
 
       final Cylinder grey = new Cylinder(5, 100);
       grey.setMaterial(greyMaterial);
...

ユーザー定義図形

例2-3に、TriangleMeshサブクラスを含むJavaFX Meshのクラス階層を示します。三角形のメッシュが、3Dレイアウトで使用される最も一般的な種類のメッシュです。

例2-3 Meshのクラス階層

java.lang.Object
   javafx.scene.shape.Mesh (abstract)
   javafx.scene.shape.TriangleMesh

TriangleMeshには、三角形のジオメトリ・メッシュを示す、点、テクスチャ座標および面の個別の配列が含まれています。スムージング・グループが、同じ曲面の一部である三角形をグループ化するために使用されます。異なるスムージング・グループ内にある三角形によって、ハード・エッジが形成されます。

次の手順を使用して、TriangleMeshのインスタンスを作成します。

  1. TriangleMeshの新しいインスタンスを作成します。

    mesh = new TriangleMesh();
    
  2. メッシュの頂点である点のセットを定義します。

    float points[] = { … };
    mesh.getPoints().addAll(points);
    
  3. 各頂点のテクスチャ座標を示します。

    float texCoords[] = { … };
    mesh.getTexCoords().addAll(texCoords);
    
  4. 頂点を使用して、空間配列を示す三角形である、面をビルドします。

    int faces[] = { … };
    mesh.getFaces().addAll(faces);
    
  5. 各面が属するスムージング・グループを定義します。

    int smoothingGroups[] = { … };
    mesh.getFaceSmoothingGroups().addAll(smoothingGroups);
    

    スムージング・グループによって、面の頂点の法線は、スムーズになるかファセット化されるように調整されます。あらゆる面に異なるスムージング・グループがある場合、メッシュは非常にファセット化されます。あらゆる面に同じスムージング・グループがある場合、メッシュは非常にスムーズになります。

ウィンドウを閉じる

目次

JavaFX: JavaFXグラフィックスの操作

展開 | 縮小