利用可能になったことをお知らせできることを嬉しく思います Aspose.3D FOSS for Java – Java アプリケーションで 3D ファイル形式を扱うための、無料かつオープンソースのライブラリです。ネイティブ依存関係を持たない純粋な Java ソリューションとして構築されており、Java 21 以降で動作するため、幅広いプロジェクトや環境で利用可能です。.
この投稿では、ライブラリが提供する内容、開始方法、そして今後の進め方について解説します。.
Aspose.3D FOSS for Java とは何ですか??
Aspose.3D FOSS for Java は、軽量な 3D ファイル処理ライブラリで、 MIT license. シーングラフ API を提供しており、複数の広く使用されているフォーマット間で 3D モデルの読み込み、検査、変換、保存が可能です。ライブラリは Java だけで完全に記述されており、外部のネイティブバイナリやプラットフォーム固有の設定は不要です。.
ソースコードは GitHub で入手可能です: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java
主なハイライト
- 純粋な Java – JNIなし、ネイティブライブラリなし、プラットフォーム制限なし。.
- Java 21以上 互換性があります。.
- MIT ライセンス – 個人、商用、または独自プロジェクトで制限なく使用できます。.
- シーングラフアーキテクチャ – ノード、メッシュ、カメラ、マテリアルからなる馴染みのあるツリー。.
- マルチフォーマットサポート – OBJ、STL、glTF 2.0、GLB ファイルの読み書き、FBX ファイルの読み取りが可能です。.
クイックスタート
Maven インストール
次の依存関係をあなたの pom.xml:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
最初の変換
最もシンプルな使用例は、ある形式の 3D ファイルを読み込み、別の形式で保存することです。以下は OBJ から STL への 2 行の変換例です:
import com.aspose.threed.*;
public class QuickConvert {
public static void main(String[] args) throws Exception {
Scene scene = Scene.fromFile("cube.obj");
scene.save("output.stl");
}
}
その Scene クラスは中心的なエントリーポイントです。呼び出す Scene.fromFile() ファイルパスを指定してモデルをロードし、次に呼び出す save() 対象パスとともに。ライブラリはファイル拡張子から形式を推測します。.
スクラッチからシーンを構築する
シーンはプログラムから構築することもできます:
import com.aspose.threed.*;
public class BuildScene {
public static void main(String[] args) throws Exception {
Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("Box");
Transform t = node.getTransform();
t.setTranslation(1, 2, 3);
scene.save("scene.gltf");
}
}
これにより新しいシーンが作成され、ルートの下に「Box」という名前の子ノードが追加され、座標 (1, 2, 3) に配置され、結果が glTF ファイルとしてエクスポートされます。.
フォーマット固有のオプションでロードする
ロードプロセスをより細かく制御したい場合、各フォーマットは専用のオプションクラスを提供します。例えば、明示的なオプションを使用して STL ファイルをロードする場合:
import com.aspose.threed.*;
public class LoadWithOptions {
public static void main(String[] args) throws Exception {
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
// Inspect the loaded scene
System.out.println("Root children: "
+ scene.getRootNode().getChildNodes().size());
// Re-export as OBJ
scene.save("part.obj");
}
}
その Scene.fromFile() static メソッドは、ロードオプションのいずれかのタイプを受け入れます: ObjLoadOptions, StlLoadOptions, GltfLoadOptions,、または FbxLoadOptions.
シーングラフの走査
シーンがロードされたら、ノードツリーをたどって内容を検査したり変更したりできます:
import com.aspose.threed.*;
public class TraverseScene {
public static void main(String[] args) throws Exception {
Scene scene = Scene.fromFile("model.gltf");
for (Node child : scene.getRootNode().getChildNodes()) {
System.out.println("Node: " + child.getName());
Transform t = child.getTransform();
System.out.println(" Translation: " + t.getTranslation());
Entity entity = child.getEntity();
if (entity instanceof Mesh) {
Mesh mesh = (Mesh) entity;
System.out.println(" Vertices: "
+ mesh.getControlPoints().size());
}
}
}
}
このパターンは、デバッグやモデル内容に関するレポートの生成、または再エクスポート前にシーンの一部を選択的に変更する際に便利です。.
変換の適用
3D 空間でノードを配置するには、 Transform 各々のオブジェクト Node:
import com.aspose.threed.*;
public class TransformExample {
public static void main(String[] args) throws Exception {
Scene scene = new Scene();
Node parent = scene.getRootNode().createChildNode("Parent");
parent.getTransform().setTranslation(10, 0, 0);
Node child = parent.createChildNode("Child");
child.getTransform().setTranslation(5, 0, 0);
child.getTransform().setScale(2, 2, 2);
// Child's world position is (15, 0, 0) due to
// parent-child transform inheritance
scene.save("transformed.gltf");
}
}
変換は標準的な親子継承モデルに従います。子オブジェクトのワールド空間位置は、ローカル変換とルートまでのすべての先祖の変換を組み合わせたものです。.
含まれるもの
このライブラリは、3Dシーングラフモデルを中心に設計された、限定的な機能セットを提供します。.
シーングラフ
シーングラフは API の中核です。すべての 3D ファイルはツリー構造で表現されます::
| クラス | ロール |
|---|---|
Scene | トップレベルコンテナ; scene graph のルート |
Node | ツリー内の名前付き位置; transforms と child nodes を保持 |
Entity | ノードに添付された visual objects の抽象基底 |
Mesh | ポリゴンジオメトリ – 頂点、面、法線 |
Camera | 仮想カメラの定義 |
Transform | ノードのローカル平行移動、回転、スケール |
GlobalTransform | 計算されたワールド空間変換 |
マテリアル
このライブラリは PBR(Physically Based Rendering)マテリアルモデルを提供します::
- PbrMaterial – 物理ベースレンダリングマテリアル(アルベド、メタリック、ラフネス、エミッシブカラー、透明度)。これは Java エディションで利用可能な唯一の具体的なマテリアルクラスです。.
Math Utilities → 数学ユーティリティ
その com.aspose.threed パッケージには基本的な数学プリミティブが含まれています:
- Vector3 – 位置、方向、色のための3成分ベクトル。.
- Matrix4 – 4x4変換行列。.
- クォータニオン – 回転表現。.
- BoundingBox – 空間クエリ用の軸整列バウンディングボックス。.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)
Load and Save Options → ロードおよび保存オプション
Each format has dedicated option classes that let you control import and export behavior: → 各フォーマットには、インポートとエクスポートの動作を制御できる専用のオプションクラスがあります:
| フォーマット | ロードオプション | 保存オプション |
|---|---|---|
| OBJ | ObjLoadOptions | ObjSaveOptions |
| STL | StlLoadOptions | StlSaveOptions |
| glTF / GLB | GltfLoadOptions | GltfSaveOptions |
| FBX | FbxLoadOptions | – (インポートのみ) |
例えば、整形された JSON と座標系が反転した glTF をエクスポートするには:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
サポートされているフォーマット
以下の表は、Aspose.3D FOSS for Java が読み書きできるフォーマットをまとめたものです。.
| フォーマット | 拡張子 | インポート | エクスポート | メモ |
|---|---|---|---|---|
| OBJ | .obj | はい | はい | MTLマテリアル付き |
| STL | .stl | はい | はい | バイナリ + ASCII |
| glTF 2.0 | .gltf | はい | はい | JSON形式 |
| GLB | .glb | はい | はい | GltfSaveOptions を使用したバイナリ glTF |
| FBX | .fbx | はい | いいえ | インポートのみ |
OBJ、STL、glTF、GLB は読み込みと保存の両方に対応しています。FBX はインポートのみ対応しています。.
フォーマット選択ガイド
適切なフォーマットの選択は、使用ケースに依存します:
- OBJ 3Dツール間で最大の互換性が必要なときに最適です。ほぼすべてのモデリングアプリケーションが OBJ の読み書きが可能です。メッシュデータの交換にはうまく機能しますが、付随する MTL ファイルを通じて基本的なマテリアル情報しか保持しません。.
- STL STL は3Dプリントワークフローで選ばれるフォーマットです。素材やシーン階層を含まない生の三角形ジオメトリを保存し、スライサーソフトウェアが期待する形になっています。パイプラインが3Dプリンターで終わるのであれば、STL が最もシンプルな選択肢です。.
- glTF glTF はウェブやリアルタイム3Dの最新標準です。PBRマテリアル、完全なシーン階層をサポートし、効率的な転送を念頭に設計されています。webベースのビューアを構築する場合や three.js や Babylon.js を使用する場合、あるいはリアルタイムレンダリングパイプラインを対象とする場合は glTF を使用してください。.
- FBX はゲーム開発およびデジタルコンテンツ制作のワークフローに深く統合されています。階層やマテリアルを含むリッチなシーンデータをサポートします。Aspose.3D FOSS for Java supports FBX インポートのみ – FBX アセットを読み込み、他のフォーマットに変換するために使用します。.
既知の制限事項
注意すべき点は Scene.render() は はサポートされていません FOSS エディションでは利用できません。このメソッドを呼び出すと例外がスローされます UnsupportedOperationException. このライブラリは、ディスプレイへのリアルタイムレンダリングではなく、ファイルベースの 3D 処理(ロード、操作、変換、モデルの保存)を目的としています。.
オープンソースとライセンス
Aspose.3D FOSS for Java は以下のライセンスでリリースされています MIT License. これは、あなたが自由にできることを意味します::
- 商用およびプロプライエタリなアプリケーションでライブラリを使用すること。.
- ニーズに合わせてソースコードを変更すること。.
- ライブラリを自分のソフトウェアの一部として配布する。.
ロイヤリティ料金はなく、使用制限もなく、MITライセンスが規定する以外の帰属表示要件もありません。.
完全なソースコードは GitHub にホストされており、貢献は歓迎です:: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java
システム要件
| 要件 | 詳細 |
|---|---|
| Java バージョン | 21 or later |
| 依存関係 | なし(純粋な Java) |
| プラットフォーム | JVM を実行できる任意のプラットフォーム |
| ビルドツール | Maven(推奨) |
はじめに
以下は、セットアップと実行に役立つリソースです::
- ドキュメント – 包括的なガイドと API のウォークスルーが利用可能です Aspose.3D ドキュメンテーションサイト.
- ナレッジベース – 実用的なハウツー記事とトラブルシューティングのヒントが Aspose.3D KB.
- API リファレンス – 詳細なクラスとメソッドのリファレンスが Aspose.3D API リファレンス.
- ソースコード – ブラウズして貢献する GitHub.
- Maven Central – パッケージは次の形で公開されています
com.aspose:aspose-3d-fossMaven Central にて。.
Common Use Cases
Here are some practical scenarios where Aspose.3D FOSS for Java fits well:
Format Conversion Pipelines
Many teams receive 3D assets in one format but need them in another. A design team might work in FBX while the web team needs glTF. The library lets you build automated conversion pipelines:
// Convert all incoming FBX assets to GLB for the web team
Scene scene = Scene.fromFile("asset.fbx");
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("asset.glb", opts);
3D Model Inspection and Validation
アプリケーションに3Dアセットを統合する前に、その内容を検証したい場合があります――ノード数の確認、ジオメトリの検証、または期待される要素が存在するかの確認などです::
Scene scene = Scene.fromFile("model.obj");
int nodeCount = scene.getRootNode().getChildNodes().size();
System.out.println("Top-level nodes: " + nodeCount);
for (Node child : scene.getRootNode().getChildNodes()) {
if (child.getEntity() instanceof Mesh) {
Mesh mesh = (Mesh) child.getEntity();
System.out.println(child.getName() + ": "
+ mesh.getControlPoints().size() + " vertices");
}
}
シーンアセンブリ
複数のモデルをロードし、単一のシーンに結合できます::
Scene scene = new Scene();
Scene part1 = Scene.fromFile("chassis.obj");
Scene part2 = Scene.fromFile("wheels.obj");
// Add nodes from each part into the combined scene
for (Node child : part1.getRootNode().getChildNodes()) {
scene.getRootNode().getChildNodes().add(child);
}
for (Node child : part2.getRootNode().getChildNodes()) {
scene.getRootNode().getChildNodes().add(child);
}
scene.save("assembled.gltf");
次は何ですか
今後の記事では、以下を取り上げます::
- シーングラフ API、マテリアル、数学ユーティリティの主要機能を徹底解説します。.
- サポートされている各3Dフォーマット(OBJ、STL、glTF、FBX)の取り扱いに関する実践的ガイド――ロード/セーブオプションやバッチ変換パターンを含みます。.
お楽しみに。また、ライブラリを自由に探索し、GitHubでフィードバックを共有してください。.