ともさんの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データを読み込み

広告
新着ページ

AIを利用し、衣服のデザイン画から型紙を制作する方法  
2つのアパレル3D技術でひらくオーダーメイド生産の手法  
【洋裁型紙】前後身頃の肩の傾きは何故前身頃の方が傾いているのか  
電子追尾式天体写真撮影法  
日本ミツバチ巣箱の種類  
ドラフター(製図台)でソーイング  
日本ミツバチが逃亡  
カメさんの箱庭  
天体用デジタルカメラの構造と天体写真  
Javaで静止画像(Jpeg)を動画(Mov)に変換  
USBカメラをJAVAで制御  

他のサイト

3D-CAD
洋裁CAD

いいねなど

 RSS 

Author: Tomoyuki Ito

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