以下の 導入記事, 私たちは 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

カメラ定義は、対応フォーマット(例:glTF)へエクスポートする際に保持されます。.

注: この 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 シーングラフ内の…は a 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 computed from mesh geometry

既知の制限事項

注目すべきは 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 を対象とした実践的なフォーマット別チュートリアルを、詳細なロードおよびセーブオプションと共に解説します。.