Функції та можливості

Функції та можливості

Функції та можливості

Ця сторінка охоплює всі основні області функціональності Aspose.3D 26.1.0 з робочими прикладами C#.


Завантаження та збереження сцен

Scene.Open() завантажує файл; Scene.Save() експортує його. Формат визначається за розширенням файлу:

using Aspose.ThreeD;

var scene = new Scene();
scene.Open("input.obj");
scene.Save("output.glb");

Використайте статичну фабрику Scene.FromFile() як альтернативу:

var scene = Scene.FromFile("input.fbx");
scene.Save("output.stl");

Опції, специфічні для формату

Передайте LoadOptions або SaveOptions підкласи для тонкого керування:

using Aspose.ThreeD;
using Aspose.ThreeD.Formats;

var scene = new Scene();
scene.Open("model.obj", new ObjLoadOptions { FlipCoordinateSystem = true });
scene.Save("model.fbx");

Доступні класи параметрів:

КласНапрямокКлючові властивості
ObjLoadOptionsІмпортFlipCoordinateSystem, EnableMaterials, Scale
ObjSaveOptionsЕкспортFlipCoordinateSystem, EnableMaterials, PointCloud
FbxLoadOptionsІмпорт(налаштування за замовчуванням)
GltfLoadOptionsІмпорт(налаштування за замовчуванням)
GltfSaveOptionsЕкспорт(налаштування за замовчуванням)
StlLoadOptionsІмпорт(налаштування за замовчуванням)
StlSaveOptionsЕкспорт(налаштування за замовчуванням)
ColladaLoadOptionsІмпортFlipCoordinateSystem
ColladaSaveOptionsЕкспортIndented, TransformStyle
PlyLoadOptionsІмпорт(налаштування за замовчуванням)

Створення графа сцени

Створюйте вузли та приєднуйте сутності для побудови ієрархії:

var scene = new Scene();
var root = scene.RootNode;

var boxNode = root.CreateChildNode("box", new Box(5, 5, 5));
var sphereNode = root.CreateChildNode("sphere", new Sphere(3));

Доступ до дочірніх елементів через node.ChildNodes і до приєднаної сутності через node.Entity.


Меш і примітиви

Створити Mesh програмно з контрольними точками та полігонами:

// Mesh.ControlPoints uses Aspose.ThreeD.Utilities.Vector4
// (double-precision, lowercase fields: x, y, z, w)
using Aspose.ThreeD.Utilities;

var mesh = new Mesh("custom");
mesh.ControlPoints.Add(new Vector4(0.0, 0.0, 0.0));   // w defaults to 1.0
mesh.ControlPoints.Add(new Vector4(10.0, 0.0, 0.0));
mesh.ControlPoints.Add(new Vector4(10.0, 10.0, 0.0));
mesh.ControlPoints.Add(new Vector4(0.0, 10.0, 0.0));
mesh.CreatePolygon(0, 1, 2, 3);

Вбудовані примітиви (Box, Sphere, Cylinder) можна перетворити на Mesh:

var box = new Box(10, 10, 10);
Mesh boxMesh = box.ToMesh();

Елементи вершини

Прикріпіть нормалі, UV та кольори вершин до геометрії:

var normals = new VertexElementNormal(MappingMode.ControlPoint, ReferenceMode.Direct);
mesh.AddElement(normals);

Доступні типи елементів вершини: VertexElementNormal, VertexElementUV, VertexElementVertexColor, VertexElementBinormal, VertexElementTangent.


Трансформації

Кожен Node містить Transform з Translation, Rotation, і Scale:

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

Прочитати позицію у світовому просторі за допомогою node.GlobalTransform.Matrix або node.EvaluateGlobalTransform().


Матеріали

Призначте матеріали вузлам для даних затінення:

var mat = new PhongMaterial("shiny");
mat.Diffuse = new Vector4(0.8, 0.2, 0.2, 1.0);
mat.Specular = new Vector4(1, 1, 1, 1);
mat.Shininess = 32;

scene.RootNode.CreateChildNode("red_box", new Box(), mat);

Типи матеріалів: LambertMaterial, PhongMaterial, PbrMaterial.


Поради та кращі практики

  • Використовуйте Scene.FromFile() для однорядкового завантаження, коли вам не потрібен кастомний LoadOptions
  • Перетворити примітиви у Mesh за допомогою ToMesh() перед додаванням вершинних елементів
  • Використовуйте GltfSaveOptions з .glb розширення для компактного бінарного виводу
  • Перевірте node.Entity для null перед кастингом — не кожен вузол містить геометрію
  • Використовуйте PolygonModifier.Triangulate() для перетворення квад-мереж перед експортом у формати лише з трикутниками, такі як STL

Поширені проблеми

ПроблемаПричинаВиправлення
ImportException при завантаженніНепідтримуваний або пошкоджений файлПеревірте, чи файл відкривається у 3D‑переглядачі; переконайтеся, що формат входить у список підтримуваних
Відсутні матеріали після завантаження OBJ.mtl файл не знайденоРозмістіть .mtl файл поруч із .obj або встановіть ObjLoadOptions.EnableMaterials = true
Відхилення масштабу після імпорту FBXРізні системи одиницьВикористовуйте ObjLoadOptions.Scale або застосуйте Transform після завантаження

FAQ

Як визначити формат невідомого файлу?

Використовувати FileFormat.Detect():

var format = FileFormat.Detect("unknown_file.bin");
Console.WriteLine(format.Extension);

Чи можу я завантажити з потоку замість шляху до файлу?

Так. Scene.Open() приймає Stream:

using var stream = File.OpenRead("model.glb");
scene.Open(stream);

Які формати підтримують як імпорт, так і експорт?

OBJ, STL, glTF/GLB, FBX, COLLADA та 3MF підтримують обидва напрямки. PLY підтримує лише імпорт (експортер PLY не підключений).


Огляд довідки API

Клас / МетодОпис
SceneКонтейнер 3D-сцени верхнього рівня
Scene.Open()Завантажити 3D-файл за шляхом або потоком
Scene.Save()Експортувати сцену у файл або потік
Scene.FromFile()Статична фабрика для завантаження та повернення Scene
NodeВузол ієрархії сцени, що містить сутності та трансформації
Node.CreateChildNode()Створити та приєднати дочірній вузол
MeshПолігональна сітка з контрольними точками та списками граней
Mesh.CreatePolygon()Визначити полігональну грань за індексами вершин
Box / Sphere / CylinderВбудовані параметричні примітиви
TransformЛокальне переміщення, обертання та масштабування
FileFormatРеєстр та детектор підтримуваних форматів
LambertMaterial / PhongMaterial / PbrMaterialТипи матеріалів для затінення
 Українська