Функції та можливості
Функції та можливості
Ця сторінка охоплює всі основні області функціональності 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 | Типи матеріалів для затінення |