はじめに

Aspose.3D FOSS は、3D ファイル形式を扱うための無料かつオープンソースの .NET ライブラリです。シンプルなファイル変換を超える包括的なユーティリティクラスを提供し、開発者がメッシュを操作したり、変換行列を構築したり、プリミティブジオメトリをプログラム的に生成したりできるようにします。このライブラリは MIT ライセンスでリリースされており、個人プロジェクトでも商用プロジェクトでも制限なく利用できます。

本稿では、ライブラリ内のユーティリティ機能に焦点を当てます。メッシュを三角形化したり、変換行列を段階的に構築したり、パラメトリックジオメトリを作成したりする際に利用するクラスやメソッドです。これらのビルディングブロックは、入門記事で取り上げたコアのシーン読み込みおよびシーン保存ワークフローを補完します。

ビルドパイプラインで 3D アセットを処理する場合でも、ゲームエンジン用にジオメトリを準備する場合でも、フォーマット間の変換を行う場合でも、これらのユーティリティは実務の 3D ワークフローで発生する一般的なタスクを処理します。


含まれる内容

メッシュ操作

Mesh クラスはポリゴンベースのジオメトリを表します。頂点インデックスからポリゴンを作成したり、ポリゴンのサイズを問い合わせたり、面を三角形化したり、頂点データを最適化したりできます。ControlPoints プロパティは頂点位置への直接アクセスを提供し、Polygons は面インデックス配列を公開します。

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();
var mesh = new Mesh("CustomMesh");

// Add control points (vertices)
mesh.ControlPoints.Add(new Vector4(0, 0, 0));
mesh.ControlPoints.Add(new Vector4(10, 0, 0));
mesh.ControlPoints.Add(new Vector4(10, 10, 0));
mesh.ControlPoints.Add(new Vector4(0, 10, 0));

// Create a quad polygon from four vertices
mesh.CreatePolygon(0, 1, 2, 3);

// Triangulate all polygons in the mesh
mesh.Triangulate();

変換ビルダー

TransformBuilder クラスは、translate、rotate、scale の操作を順に行うことで変換行列を構築するための流暢なインターフェースを提供します。合成順序(append または prepend)を制御でき、ビルダーをリセットして新しいチェーンを開始することができます。

using Aspose.ThreeD;
using Aspose.ThreeD.Utilities;

var builder = new TransformBuilder(ComposeOrder.Append);

// Build a combined transform: translate, then rotate, then scale
builder.Translate(5, 0, 3);
builder.RotateDegree(45, new Vector3(0, 1, 0));
builder.Scale(2, 2, 2);

// Retrieve the composed 4x4 matrix
Matrix4 result = builder.Matrix;

ポリゴンモディファイア

PolygonModifier クラスは、メッシュ処理のための静的ユーティリティメソッドを提供し、Triangulate メソッドは n 辺ポリゴンメッシュを三角形のみのジオメトリに変換することを意図しています。この FOSS エディションでは、Triangulate は実装されておらず、すべてのオーバーロードが実行時に NotImplementedException をスローします。動作する三角形分割には、上記の メッシュ操作 セクションに示された Mesh.Triangulate() を代わりに使用してください。

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();
var box = new Box(2, 2, 2);
Mesh boxMesh = box.ToMesh();

プリミティブジオメトリ生成

ライブラリには、BoxSphereCylinder といったパラメトリックジオメトリクラスが含まれています。各プリミティブは寸法やセグメント数で構成でき、ToMesh() メソッドを使って Mesh に変換し、さらに処理やエクスポートに利用できます。

using Aspose.ThreeD.Entities;

// Create a parameterized sphere
var sphere = new Sphere(5.0, 32, 16);
Mesh sphereMesh = sphere.ToMesh();

// Create a cylinder (cone when one radius is zero)
var cone = new Cylinder(0, 3.0, 6.0);
Mesh coneMesh = cone.ToMesh();

バウンディングボックス計算

すべての Entity サブクラスは、ジオメトリの軸平行バウンディングボックスを返す GetBoundingBox() メソッドを公開します。BoundingBox 構造体は、MinimumMaximum のコーナーベクトルを提供し、空間クエリやカメラのフレーミングに役立ちます。

using Aspose.ThreeD.Entities;
using Aspose.ThreeD.Utilities;

var box = new Box(4, 2, 6);
BoundingBox bounds = box.GetBoundingBox();

Vector3 min = bounds.Minimum;
Vector3 max = bounds.Maximum;

クイックスタート

パッケージを NuGet からインストールします:

dotnet add package Aspose.3D.FOSS

ファイルを読み込み、すべてのメッシュを三角形化し、結果を保存します:

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

// Load a scene from an OBJ file
var scene = new Scene();
scene.Open("input.obj");

// Walk child nodes and triangulate each mesh entity
foreach (var node in scene.RootNode.ChildNodes)
{
    foreach (var entity in node.Entities)
    {
        if (entity is Mesh mesh)
        {
            mesh.Triangulate();
        }
    }
}

// Save the triangulated scene as glTF
scene.Save("output.glb");

サポートされている形式

フォーマット拡張子読み取り書き込み
Collada.daeはいはい
FBX.fbxはいはい
glTF / GLB.gltf / .glbはいはい
3MF.3mfはいはい
Wavefront OBJ.objはいはい
PLY.plyはいいいえ
STL.stlはいはい

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

Aspose.3D FOSS は MIT ライセンスの下でリリースされています。オープンソースプロジェクトおよびプロプライエタリプロジェクトの両方で、ライブラリを使用、変更、再配布することができます。完全なソースコードは GitHub 上の aspose-3d-foss/Aspose.3D-FOSS-for-.NET で入手可能です。


開始ガイド

  • Developer Guide – シーン管理、フォーマットオプション、そして高度な機能を網羅した完全なドキュメント。
  • Knowledge Base – ハウツー記事とよくある質問。
  • API Reference – クラスごとのリファレンスで、メソッドシグネチャとプロパティの詳細を含む。

関連リソース