3Dデータを読み込み表示するサンプルプログラム
JavaFXを利用してSTLなどの3Dデータファイルを開き、Stageに表示させるサンプルプログラムです。
フリーのライブラリを利用して、簡単に作ることができました。
ライブラリの準備
こちら
からライブラリをダウンロードします。サンプルプログラムではSTL形式を利用しましたが、3ds、fxml、obj、x3d、daeなどのライブラリも用意されています。
ダウンロードして解凍したファイルを、
Java
楽天 ga参照できる場所へ置きます。
私の場合、C:\Program Files\Java\jre1.X.X\lib\ext\の中へ放り込んでいます。
3Dデータの作成
3D-CAD「Fusion360」を使ってモデルを作成し、STL形式で保存しました。
Fusion360楽天 は、趣味用途であれば無償で利用できます。サンプルでは単純な球のモデル作っています。
サンプルプログラム
StlLoadTest.javaは3Dモデルファイルを読み込んで表示します。
Stl.javaは3Dモデルファイルを読み込んで、3DのMeshViewを返します。
package tomojavalib.fxstl;
import javafx.application.Application;
import javafx.geometry.Point3D;
import javafx.scene.Group;
import javafx.scene.LightBase;
import javafx.scene.PerspectiveCamera;
import javafx.scene.PointLight;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.DrawMode;
import javafx.scene.shape.MeshView;
import javafx.scene.shape.TriangleMesh;
import javafx.stage.Stage;
import tomojavalib.fxstl.Stl;
public class StlLoadTest extends Application {
public static void main(String[] args)
{
launch( args );
}
@Override
public void start(Stage primaryStage) throws Exception
{
// シーングラフの構成
Group root = new Group();
//読み込むSTLファイル
String fileName = "D:/kyu.stl";
//STLファイルを読み込んでMeshViewを得る
Stl stl = new Stl();
TriangleMesh trianglemesh = stl.getMeshView(fileName);
MeshView meshview = new MeshView();
meshview.setMesh( trianglemesh );
meshview.setDrawMode( DrawMode.LINE);
//meshviewを回転
meshview.setRotationAxis( new Point3D( 0.5 , 1.0 , 0.0 ) );
meshview.setRotate( 135.0 );
//MeshViewをグループに追加
root.getChildren().add( meshview );
// シーンの作成
Scene scene = new Scene( root , 400 , 400 , true );
scene.setFill( Color.BLACK );
// カメラ設定
PerspectiveCamera camera = new PerspectiveCamera( true );
camera.setFarClip( 3000 );
camera.setTranslateZ( -300 );
scene.setCamera( camera );
// 光源設定
LightBase light = new PointLight();
light.setTranslateZ( -1500 );
root.getChildren().add( light );
// ウィンドウ表示
primaryStage.setScene( scene );
primaryStage.show();
}
}
package tomojavalib.fxstl;
import java.io.File;
import com.interactivemesh.jfx.importer.ImportException;
import com.interactivemesh.jfx.importer.stl.StlMeshImporter;
import javafx.scene.shape.TriangleMesh;
/**STL形式のファイルを読み込んでmeshViewを返すclass
* */
public class Stl {
public TriangleMesh getMeshView( String filename ){
String url = new File( filename ).toURI().toString();
// 3Dモデルのインポーターを作成
StlMeshImporter importer = new StlMeshImporter();
// インポータにモデル・ファイルを設定
try{
importer.read( url );
}catch( ImportException e ){
e.printStackTrace();
}
// 3Dモデルを取込
TriangleMesh mesh = importer.getImport();
// インポータを閉じる
importer.close();
return mesh;
}
}
3Dデータの利用
STLファイルから取り込んだMeshViewに衝突判定条件を付けて、
(こちら)
上から布を被せるシミュレーションを作ってみました。
条件つけによっては球に弾性を付けたり、壁にぶつけて跳ね返らせたりというプログラムも出来ると思います。
最終更新日: 2017-09-26 10:54:35