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

すべての例は、以下の using ディレクティブを前提としています::

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

そして NuGet パッケージ::

dotnet add package Aspose.3D --version 26.1.0

シーン グラフ

シーングラフはコアデータ構造です。A Scene は a を含みます RootNode,は子ノードと添付された を持つことができます Node (例えば a Entity または Mesh エンティティはシーンの視覚コンテンツです――メッシュ、カメラ、ライトです。これらは を使用してアタッチします Camera).

ノードの作成とナビゲーション

var scene = new Scene();

// Create a hierarchy
var parent = scene.RootNode.CreateChildNode("Parent");
var child1 = parent.CreateChildNode("Child1");
var child2 = parent.CreateChildNode("Child2");

// Navigate the tree
Console.WriteLine("Root children: " + scene.RootNode.ChildNodes.Count);
Console.WriteLine("Parent children: " + parent.ChildNodes.Count);

エンティティのノードへの添付

プリミティブ CreateChildNode:

var scene = new Scene();

// Create a box primitive and attach it to the scene
var box = new Box(2, 2, 2);
var boxNode = scene.RootNode.CreateChildNode("BoxNode", box);

// Create a sphere primitive
var sphere = new Sphere(1);
var sphereNode = scene.RootNode.CreateChildNode("SphereNode", sphere);

scene.Save("primitives.gltf");

組み込みプリミティブ

.NET エディションには、手動で頂点を構築せずにジオメトリを生成するパラメトリック形状クラスが含まれています::

Primitive説明
Box幅・高さ・奥行きを設定可能な軸平行ボックス
Sphere半径を設定可能なパラメトリック球体
Cylinder上部/下部の半径と高さを設定可能なパラメトリックシリンダー

これらのプリミティブはノードに直接アタッチするか、あるいは a に変換できます Mesh 経由で ToMesh():

var cylinder = new Cylinder(1, 1, 2);
var mesh = cylinder.ToMesh();

Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);
Console.WriteLine("Polygons: " + mesh.PolygonCount);

メッシュ構築

完全に制御したい場合は、制御点とポリゴン定義を使用してメッシュをゼロから構築します::

var mesh = new Mesh();

// Add vertex positions
mesh.ControlPoints.Add(new Vector4(0, 0, 0, 1.0f));
mesh.ControlPoints.Add(new Vector4(1, 0, 0, 1.0f));
mesh.ControlPoints.Add(new Vector4(0.5f, 1, 0, 1.0f));

// Define a triangle face
mesh.CreatePolygon(0, 1, 2);

// Attach to a scene
var scene = new Scene();
scene.RootNode.CreateChildNode("triangle", mesh);
scene.Save("triangle.stl");

制御点は使用します Vector4 とともに w コンポーネントを設定します 1.0f 標準的なデカルト座標位置用です。ポリゴンは制御点インデックスを渡すことで定義されます CreatePolygon().

変換

すべての Node がある Transform ローカル位置、回転、スケールを制御するプロパティ:

var scene = new Scene();

var node = scene.RootNode.CreateChildNode("Moved");
node.Transform.Translation = new FVector3(5, 0, 0);
node.Transform.Scale = new FVector3(2, 2, 2);

変換の継承

変換はシーン階層を通じて合成されます。子ノードのワールド空間位置は、すべての先祖の変換の積です::

var scene = new Scene();

var parent = scene.RootNode.CreateChildNode("Parent");
parent.Transform.Translation = new FVector3(10, 0, 0);

var child = parent.CreateChildNode("Child");
child.Transform.Translation = new FVector3(5, 0, 0);

// Child's world position is (15, 0, 0)
// Access via child.GlobalTransform

GlobalTransform

読み取り専用の GlobalTransform 各々のプロパティ Node すべての祖先変換を合成した後の計算されたワールド空間変換行列を提供します。結果には以下を通じてアクセスします node.GlobalTransform.Matrix.

マテリアル

このライブラリには、複雑さが増す3種類のマテリアルが含まれています::

LambertMaterial

古典的な拡散のみマテリアル::

var material = new LambertMaterial("WoodMaterial");
material.Diffuse = new Vector4(0.6f, 0.4f, 0.2f, 1.0f);
material.Ambient = new Vector4(0.1f, 0.1f, 0.1f, 1.0f);
material.Transparency = 0.0f;

PhongMaterial

Lambert に鏡面ハイライトを追加したもの::

var material = new PhongMaterial("ShinyMetal");
material.Specular = new Vector4(0.8f, 0.8f, 0.8f, 1.0f);
material.Shininess = 50.0f;
material.SpecularPower = 32.0f;

PbrMaterial

glTF 2.0 で使用される物理ベースレンダリングマテリアル::

var material = new PbrMaterial("GoldPBR");
material.BaseColor = new Vector4(1.0f, 0.8f, 0.2f, 1.0f);
material.Metallic = 0.9f;
material.Roughness = 0.1f;
material.Occlusion = 1.0f;

PBR マテリアルは、文字列テクスチャパスプロパティを介して、ベースカラー、メタリック/ラフネス、法線、エミッシブ、オクルージョンマップ用のテクスチャスロットをサポートします。.

数学ユーティリティ

このライブラリは、3D 空間操作のための数学プリミティブのセットを提供します::

ベクトル型

コンポーネント精度一般的な使用例
Vector2X, YfloatUVテクスチャ座標
Vector3X, Y, Zfloat汎用の3成分ベクトル
Vector4X, Y, Z, Wfloat制御点、法線
FVector3X, Y, Zfloat変換プロパティ(Translation、Scale)
FVector4X, Y, Z, Wfloat頂点要素データ

クォータニオン

クォータニオンはジンバルロックなしで回転を表現します:

var rotation = new Quaternion(0, 0, 0, 1); // Identity
node.Transform.Rotation = rotation;

Matrix4

4x4 transformation matrices for composing transforms:

// Matrix operations are used internally by Transform
// and GlobalTransform for world-space computation

BoundingBox

空間クエリ用の軸整列バウンディングボックス:

// BoundingBox stores Minimum and Maximum FVector3 corners
// Used for frustum culling and spatial partitioning

頂点要素

メッシュは位置情報以外に、追加の頂点ごとのデータ層を保持できます:

  • VertexElementNormal – ライティング計算用の表面法線。.
  • VertexElementUV – 画像をジオメトリにマッピングするためのテクスチャ座標。.
  • VertexElementVertexColor – 各頂点ごとのRGBAカラー データ。.

各頂点要素は MappingMode (制御点ごと、ポリゴン頂点ごと、またはポリゴンごと) と ReferenceMode (直接値またはインデックス値)。.

アニメーションクリップ

その Scene クラスは名前付きアニメーションクリップを via でサポートします CreateAnimationClip() および GetAnimationClip(). 現在のFOSSエディションでは、アニメーションクリップの作成と検索は機能していますが、キーフレームデータと再生はまだ実装されていません。.

var scene = new Scene();
var clip = scene.CreateAnimationClip("Walk");

// Retrieve by name
var found = scene.GetAnimationClip("Walk");
Console.WriteLine("Clip found: " + (found != null));

次は何か

次の投稿では .NET での3Dファイルフォーマットの操作 – 実用的なフォーマット別ガイドで、OBJ、STL、glTF、FBX、3MF のロード/セーブオプションとバッチ変換パターンを提供します。.