利用可能なことを発表することに興味があります。 ☆3D FOSS for Java の略。 Javaアプリケーションで3Dファイル形式を活用するための無料オープンソース図書館 純粋なJavaソリューションとして構築され、先住民の依存症はありませんので、図书館はJAVA21とその後の上で実行されており、幅広いプロジェクトや環境にアクセスできます。.

この投稿では、図書館が提供するもの、どのように始めるか、そしてここからどこへ行くかを説明します。.

では、Javaの3D FOSSとは何でしょうか。?

Aspose.3D FOSS for Java は、下に掲載された軽量の 3D ファイル処理ライブラリです。 ライセンスMIT.広く使用されているフォーマットを介して3Dモデルをロード、検証、変換、保存できるシーングラフAPIを提供します.図書館は完全にJavaで書き込みであり、外部の本土バイナリーやプラットフォーム特定の設定を必要としません。.

ソースコードはGitHubで利用できます。: トップページ > アスポーズ3D-FOSS/Aspose3d-foss

キーハイライト

  • 純粋なJava ── JNI、本地図書館、プラットフォーム制限はありません。.
  • ジャバ 21+ 合致する。.
  • ライセンスMIT 個人、商業、または所有プロジェクトで制限なしに使用する。.
  • 舞台・グラフアーキテクチャ 知り合いの木は、ノード、メッセージ、カメラ、材料。.
  • 多形式サポート – OBJ、STL、glTF 2.0、およびGLBファイルを読み書き、FbXファイルを読む。.

早速スタート

マウントインストール

次に依存性をあなたのものに追加する。 pom.xml:

<dependency>
  <groupId>org.aspose</groupId>
  <artifactId>aspose-3d-foss</artifactId>
  <version>26.5.0</version>
</dependency>

初回の変換

最もシンプルな使用ケースは、1つのフォーマットで3Dファイルをアップロードし、別のフォーラムに保存することです。:

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");
    }
}

これは新しいシーンを生み出し、根の下に「ボックス」と呼ばれる子ノードを追加し、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() 静的方法は、負荷オプションのいずれかのタイプを受け入れる: 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トップレベルのコンテナ;シーングラフの根
Node木の中の名付けされた位置;変形と子どものノードを保持する。
Entityノードに付属する視覚的なオブジェクトの抽象的ベース
Mesh多角地質 - 垂直、顔、正常
Camera仮想カメラの定義
Transformノードのローカル翻訳、回転、スケール
GlobalTransformコンピュータ・ワールド・スペース変革

材料

図書館は、PBR(物理的にベースのレンダー)材料モデルを提供しています。:

  • PbrMaterial – 物理的にベースのレンドマテリアル、アルビドー、金属性、硬さ、排出色、透明性。これはJava版で利用可能な唯一のコンクリート材料クラスです。.

マシン用途

☆ ♪ 〜 com.aspose.threed 基本的な数学原理を含むパッケージ:

  • ヴェクトル3 ポジション、方向、色のための3コンポーネントベクター。.
  • マトリックス4 4×4変換マトリックス.
  • 四角形 回転表現。.
  • BoundingBox スペース・クエリのための軸に合った結びつきボックス。.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)

ダウンロード・保存オプション

各フォーマットには、輸入と輸出の行動をコントロールできる専用のオプションクラスがあります。:

フォーマットオプションの充電選択肢保存
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
グラス / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions(輸入のみ)

例えば、フリップされたJSONとコルダートシステムでGlTFを輸出するには:

GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);

scene.save("output.gltf", opts);

サポートされたフォーマット

次の表では、Java の Aspose.3D FOSS for Java が読み書きできるフォーマットをまとめます。.

フォーマット拡張輸入輸出ノート
OBJ.objはいはいMTL材料の使用
STL.stlはいはいバイナリー + ASCII
グラス 2.0.gltfはいはいJSON フォーマット
GLB.glbはいはいバイナリー glTF を通じて GltfSaveOptions
FBX.fbxはいノー輸入のみ

OBJ、STL、glTF、およびGLBは充電と節約の両方をサポートします。.

フォーマット選択ガイド

正しい形式を選択することは、あなたの使用状況に依存します:

  • OBJ ほぼすべてのモデリングアプリケーションはOBJを読み書きすることができます.それはメッシュデータ交換のために良く機能しますが、同伴MTLファイルを通じて基本的な材料情報のみを提供しています。.
  • STL 3Dプリントワークフローのための選択形式です。材料やシーン・ギャラリーなしで原料三角形地質を保存し、スライザーソフトウェアが期待しているのは正確です. あなたのパイプラインが3Dプレーヤーで終わる場合、STLは簡単な選択です.
  • グラフ ウェブとリアルタイム3Dのための現代的な標準です。PBR材料、フルシーン階級をサポートし、効率的な転送のために設計されています.Webベースの視聴者を作成する際にglTFを使用して、3jsまたはBabylon.jsで作業したり、リアルのタイミングのレンダーパイプラインをターゲットにします。.
  • FBX ゲーム開発とデジタルコンテンツ作成のワークフローに深く統合されています. 階段データ、ギャラリーや材料を含む豊富なステージデータをサポートしています. Aspose.3D FOSS for Java supports FBX 輸入のみ 使用して、FBXの資産をアップロードし、他のフォーマットに変換します。.

知られている制限

重要なのは、そのことに注意すること。 Scene.render() は、 サポートされない トップページ > この方法を呼ぶと、一つの方法が投げ出す。 UnsupportedOperationException.図書館は、ファイルベースの3D処理(モデルを充電、操作、変換、節約)ではなくリアルタイムでディスプレイにリダイレクトするために設計されています。.

オープンソースとライセンス

Aspose.3D FOSS for Java は、下のリリースに掲載されます。 ライセンスMIT.つまり、あなたは自由である:

  • 図書館を商業的および所有的なアプリケーションで使用する。.
  • あなたのニーズに合うためにソースコードを変更します。.
  • 図書館を自分のソフトウェアの一部として配布します。.

ローヤル料金、使用制限など、MITライセンスが指定するものを超える割り当て要件はありません。.

完全なソースコードはGitHubでホストされ、貢献が歓迎されます: トップページ > アスポーズ3D-FOSS/Aspose3d-foss

システム要件

要求事項詳細
Java バージョン21 or later
依存症純粋なJava(純潔なジャバ)
プラットフォームJVMを実行するプラットフォーム
ツール構築マウス(推奨)

始まること

以下は、あなたが立ち上がって走るのを助けるためのリソースです。:

一般利用ケース

ここでは、Javaのための3D FOSSがうまく合っている実用的なシナリオをいくつか紹介します。:

変換管形状

多くのチームは1つの形式で3D資産を受け取りますが、それらを別の形式に必要とします。デザインチームがFBXで働く場合がありますがウェブチームにはglTFが必要です。図書館では自動変換パイプを作成できます:

// 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でフィードバックを共有する自由を感じます。.