以下の 導入記事, Aspose.3D FOSS for Java が何であるか、そして始め方について説明しました。この投稿では、ライブラリを構成する主要な機能をより深く掘り下げ、各領域のコード例を示します。.

すべての例は以下のインポートを前提としています::

import com.aspose.threed.*;

そして Maven 依存関係は次のとおりです::

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-3d-foss</artifactId>
    <version>26.1.0</version>
</dependency>

シーングラフ API

シーングラフは Aspose.3D FOSS for Java の基盤です。ファイルから読み込まれたものでもプログラムで構築されたものでも、すべての3Dモデルは、ルートがあるノードのツリーとして表現されます。 Scene オブジェクト。.

シーン

この Scene クラスはすべての操作のエントリーポイントです。空のシーンを作成するか、ファイルからシーンを読み込むことができます:

// Empty scene
Scene scene = new Scene();

// Load from file
Scene loaded = Scene.fromFile("model.obj");

// Load with explicit options
Scene fromStl = Scene.fromFile("part.stl", new StlLoadOptions());

ノードツリーのルートは次を使ってアクセスします getRootNode().

ノード

A Node はシーンツリー内の名前付き位置を表します。ノードは子を持つことができ、階層を形成します。各ノードはローカル Transform と計算された GlobalTransform.

Scene scene = new Scene();

// Create a child node under the root
Node box = scene.getRootNode().createChildNode("Box");

// Create a nested hierarchy
Node arm = scene.getRootNode().createChildNode("Arm");
Node hand = arm.createChildNode("Hand");
Node finger = hand.createChildNode("Finger");

ノードを個別に作成し、後で添付することもできます::

Node standalone = new Node("Standalone");
scene.getRootNode().getChildNodes().add(standalone);

エンティティとメッシュ

ある Entity は、ノードにアタッチできるすべてのもの(ジオメトリ、カメラ、ライト)のための抽象基底クラスです。最も一般的なエンティティタイプは Mesh,、ポリゴンジオメトリ(頂点、面、法線)を保持します。.

Scene scene = Scene.fromFile("cube.obj");

// Traverse nodes and inspect entities
for (Node child : scene.getRootNode().getChildNodes()) {
    Entity entity = child.getEntity();
    if (entity instanceof Mesh) {
        Mesh mesh = (Mesh) entity;
        System.out.println("Node: " + child.getName());
        System.out.println("  Vertices: " + mesh.getControlPoints().size());
    }
}

カメラ

カメラはノードに添付されるエンティティです::

Scene scene = new Scene();

Node cameraNode = scene.getRootNode().createChildNode("MainCamera");
// Camera entity can be assigned to the node

注意: この Camera クラスは Java エディションで、コンストラクタのみを持つ最小限のスタブです。ノードにアタッチされたカメラエンティティは 書き込まれません glTF やその他のフォーマットにエクスポートする際には — glTF エクスポーターはエンティティのみを処理します Mesh エンティティです。エクスポートされたファイルでカメラデータが保持されることに依存しないでください。.

注意: この Light クラスは Java エディションで利用できません。インポートされたファイルからのシーン照明データは汎用として保存されます Entity オブジェクト。.

フォーマットに依存しないロードとセーブ

このライブラリの強みの一つは、シーングラフがフォーマットに依存しないことです。任意のサポートされたフォーマットからロードし、単一の API でシーンを操作し、任意のサポートされたフォーマットへ保存できます。.

// Load OBJ, save as glTF
Scene scene = Scene.fromFile("input.obj");
scene.save("output.gltf");

// Load FBX, save as STL (FBX is import only)
Scene scene2 = Scene.fromFile("character.fbx");
scene2.save("character.stl");

// Load STL, save as GLB
Scene scene3 = Scene.fromFile("part.stl", new StlLoadOptions());
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene3.save("part.glb", opts);

フォーマットはファイル拡張子で決定されます。出力を制御するために、明示的な保存オプションを渡すこともできます::

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

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

マテリアル

Aspose.3D FOSS for Java は、PBR(Physically Based Rendering)マテリアルモデルを介して提供します PbrMaterial.。これは Java エディションで唯一の具体的なマテリアルクラスです。.

PbrMaterial

アルベド、メタリック、ラフネスのパラメータを使用する物理ベースのレンダリングマテリアルです。これは glTF および最新のリアルタイムエンジン向けの標準マテリアルモデルです。.

PbrMaterial pbr = new PbrMaterial();
pbr.setAlbedo(new Vector4(0.8, 0.2, 0.2, 1.0)); // Red-ish base color
pbr.setMetallicFactor(0.0);  // Non-metallic
pbr.setRoughnessFactor(0.5); // Medium roughness

フォーマット間でのマテリアルの保持は、対象フォーマットの機能に依存します。PBR マテリアルは glTF および GLB 出力に自然にマッピングされます。.

Transform と Spatial

すべての Node シーン グラフ内にある … は Transform それは親に対する位置、回転、スケールを定義します。.

ローカルトランスフォーム

Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("TestNode");

Transform t = node.getTransform();
t.setTranslation(1, 2, 3);       // Position
t.setScale(2, 2, 2);             // Uniform scale
t.setEulerAngles(0, 45, 0);      // Euler rotation in degrees

グローバルトランスフォーム

その GlobalTransform は、親チェーン全体を考慮した計算済みのワールド空間変換です。これは読み取り専用で、自動的に更新されます。.

Node parent = scene.getRootNode().createChildNode("Parent");
parent.getTransform().setTranslation(10, 0, 0);

Node child = parent.createChildNode("Child");
child.getTransform().setTranslation(5, 0, 0);

// Child's global position is (15, 0, 0)
GlobalTransform global = child.getGlobalTransform();

この親子間の変換継承は、3D エンジンや DCC ツールで使用される標準的なシーングラフパターンに従っています。.

数学ユーティリティ

このライブラリには、3D 操作用のコア数学型が含まれています。.

Vector3

位置、方向、法線、色に使用される 3 成分ベクトルです。.

Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);

// Addition
Vector3 sum = Vector3.add(a, b); // (1, 1, 0)

Matrix4

平行移動、回転、スケールを単一の操作に結合するための 4x4 変換行列です。.

Matrix4 mat = new Matrix4();
// Matrix4 is used internally by transforms
// and can be retrieved from GlobalTransform

Quaternion

ジンバルロックを回避し、スムーズに補間できる回転表現です。クォータニオンは変換システム内部で使用されています。.

BoundingBox

空間クエリ、衝突判定、シーン解析に使用される軸平行バウンディングボックスです。.

BoundingBox bbox = new BoundingBox();
// BoundingBox can be constructed directly with min/max Vector3 values

注: Node.getBoundingBox() および Entity.getBoundingBox() はまだ実装されていません。両方とも空の BoundingBox (センチネル Double.MAX_VALUE / Double.MIN_VALUE 値)メッシュジオメトリに関係なく。このバージョンでは、実際のジオメトリ境界を計算するためにこれらのメソッドを使用しないでください。.

既知の制限事項

注目すべき点は Scene.render()サポートされていません FOSSエディションではサポートされていません。呼び出すと UnsupportedOperationException.。このライブラリは、ファイルベースの3D処理(ロード、変換、保存)向けに設計されており、リアルタイムレンダリングではありません。.

概要

Aspose.3D FOSS for Java の主な機能は、5 つの領域に分かれます::

エリアクラス目的
シーン・グラフScene, Node, Entity, Mesh, Camera階層的モデル表現
フォーマットOBJ、STL、glTF/GLB のロード/セーブオプション;FBX のロードフォーマットに依存しない I/O
マテリアルPbrMaterial表面外観(PBR)
変換Transform, GlobalTransform空間位置決め
数学Vector3, Matrix4, Quaternion, BoundingBox3D math primitives

次回の記事では、OBJ、STL、glTF、FBX を対象とした実践的なフォーマット別チュートリアルを、詳細なロードおよびセーブオプションと共に解説します。.