ともさんのHP >プロブラミング >JavaFX >JavaFXで3Dデータを読み込み

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に衝突判定条件を付けて、 (こちら) 上から布を被せるシミュレーションを作ってみました。
条件つけによっては球に弾性を付けたり、壁にぶつけて跳ね返らせたりというプログラムも出来ると思います。
JavaFXクロスシミュレーション

最終更新日: 2017-09-26 10:54:35

ともさんのHP >プロブラミング >JavaFX >JavaFXで3Dデータを読み込み

このエントリーをはてなブックマークに追加
新着ページ

ペットボトルを利用したスズメバチホイホイ  
シャガの栽培、手入れ、増やしかた  
自動水やり器の自作  
テキスタイルプリントでキャスケット  
竹を曲げる方法  
アサガオ、F2の特性  
日本ミツバチ巣箱の検討  
柿の枝の剪定方法  
オモトの植え替え  
テーブルソーの安全な使いかた  
初心者用巣箱その1  

他のサイト

3D-CAD
洋裁CAD

いいねなど

 RSS 

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます