Ми раді оголосити про доступність Aspose.3D FOSS for .NET – безкоштовна, з відкритим вихідним кодом бібліотека для роботи з 3D форматами файлів у .NET застосунках. Створена як чисте рішення на C# без нативних залежностей, бібліотека орієнтована на .NET 10.0 і новіші версії, що робить її доступною для широкого спектру проєктів та середовищ.
У цьому дописі розглядаються можливості бібліотеки, як розпочати роботу та куди рухатися далі.
Що таке Aspose.3D FOSS for .NET?
Aspose.3D FOSS for .NET — це легка бібліотека для обробки 3D файлів, опублікована під MIT license. Вона надає API графу сцени, який дозволяє завантажувати, досліджувати, трансформувати та зберігати 3D моделі у кількох широко використовуваних форматах. Бібліотека повністю написана на C# і не потребує зовнішніх нативних бінарних файлів чи платформо-специфічних налаштувань.
Вихідний код доступний на GitHub: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET
Ключові особливості
- Чистий C# – без P/Invoke, без нативних бібліотек, без обмежень платформи.
- .NET 10.0+ сумісний.
- Ліцензовано за MIT – використовуйте його у особистих, комерційних або пропрієтарних проектах без обмежень.
- Архітектура графа сцени – знайоме дерево вузлів, сіток, камер і матеріалів.
- Підтримка багатьох форматів – читати та записувати файли OBJ, STL, glTF 2.0, GLB, FBX, Collada та 3MF.
Швидкий старт
Встановлення через NuGet
Додайте пакет NuGet до вашого проєкту:
dotnet add package Aspose.3D.Converter --version 1.0.0
Ваше перше перетворення
Найпростіший випадок використання — завантажити 3D‑файл в одному форматі та зберегти його в іншому. Ось двохрядкове перетворення з OBJ у STL:
using Aspose.ThreeD;
var scene = new Scene();
scene.Open("cube.obj");
scene.Save("output.stl");
The Scene class є центральною точкою входу. Викличте scene.Open() з шляхом до файлу, щоб завантажити модель, потім викличте Save() з цільовим шляхом. Бібліотека визначає формат за розширенням файлу.
Створення сцени з нуля
Ви також можете створювати сцени програмно:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
var scene = new Scene();
var box = new Box(2, 2, 2);
var node = scene.RootNode.CreateChildNode("Box", box);
node.Transform.Translation = new FVector3(1, 2, 3);
scene.Save("scene.gltf");
Це створює нову сцену, додає примітив‑коробку як дочірній вузол під коренем, розташовує її у координатах (1, 2, 3) і експортує результат у файл glTF.
Завантаження з параметрами, специфічними для формату
Коли потрібен більш тонкий контроль над процесом завантаження, кожен формат надає спеціальний клас параметрів. Наприклад, завантаження STL‑файлу з явними параметрами:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;
var scene = new Scene();
var opts = new StlLoadOptions();
scene.Open("part.stl", opts);
// Inspect the loaded scene
Console.WriteLine("Root children: " + scene.RootNode.ChildNodes.Count);
// Re-export as OBJ
scene.Save("part.obj");
The scene.Open() метод приймає будь-який з типів параметрів завантаження: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, FbxLoadOptions, або TmfLoadOptions.
Обхід графа сцени
Після завантаження сцени ви можете пройти по дереву вузлів, щоб дослідити або змінити його вміст:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
var scene = new Scene();
scene.Open("model.gltf");
foreach (var child in scene.RootNode.ChildNodes)
{
Console.WriteLine("Node: " + child.Name);
Console.WriteLine(" Translation: " + child.Transform.Translation);
if (child.Entity is Mesh mesh)
{
Console.WriteLine(" Vertices: " + mesh.ControlPoints.Count);
}
}
Такий підхід корисний для налагодження, створення звітів про вміст моделі або вибіркового змінення частин сцени перед повторним експортом.
Застосування трансформацій
Розташування вузлів у 3D-просторі здійснюється за допомогою Transform властивості кожного Node:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
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.Transform.Scale = new FVector3(2, 2, 2);
// Child's world position is (15, 0, 0) due to
// parent-child transform inheritance
scene.Save("transformed.gltf");
Трансформації слідують стандартній моделі успадкування «батько‑дитина»: позиція дитини у світовому просторі є комбінацією її локальної трансформації та всіх трансформацій предків до кореня.
Що включено
Бібліотека постачається з орієнтованим набором можливостей, розроблених навколо 3D моделі графа сцени.
Граф Сцени
Граф сцени є основою API. Кожен 3D файл представлений у вигляді деревовидної структури:
| Клас | Роль |
|---|---|
Scene | Контейнер верхнього рівня; корінь графа сцени |
Node | Іменована позиція в дереві; містить трансформації та дочірні вузли |
Entity | Абстрактна база для візуальних об’єктів, прикріплених до вузлів |
Mesh | Полігональна геометрія – вершини, грані, нормалі |
Camera | Визначення віртуальної камери |
Transform | Локальний зсув, обертання та масштаб для вузла |
GlobalTransform | Обчислене перетворення у світовому просторі |
Вбудовані примітиви
Видання .NET включає параметричні класи форм, які можна безпосередньо прикріплювати до вузлів або перетворювати на Mesh:
- Box – прямокутна коробка, орієнтована по осях, з налаштовуваною шириною, висотою та глибиною.
- Sphere – параметрична сфера з налаштовуваним радіусом.
- Циліндр – параметричний циліндр з налаштовуваними радіусами та висотою.
var sphere = new Sphere(1);
var mesh = sphere.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);
Матеріали
Бібліотека надає кілька типів матеріалів:
- LambertMaterial – класичний матеріал лише з дифузним освітленням, що має компоненти кольору: навколишній, дифузний, емісивний та відбивний.
- PhongMaterial – розширює Lambert, додаючи спекулярні підсвічування та блиск.
- PbrMaterial – матеріал фізично‑заснованого рендерингу з базовим кольором, металевістю, шорсткістю, оклюзією та слотами текстур.
Математичні утиліти
Це Aspose.ThreeD простір імен включає основні математичні примітиви:
- FVector3 – вектор з одинарною точністю, що складається з 3 компонентів, для позицій, напрямків та масштабу. Використовується в
Transform.TranslationіTransform.Scale. - Vector4 – вектор з одинарною точністю, що складається з 4 компонентів, для контрольних точок та нормалей.
- Matrix4 – 4x4 матриця перетворення.
- Quaternion – представлення обертання. Використовується в
Transform.Rotation. - BoundingBox – осьово-орієнтована обмежувальна коробка для просторових запитів.
var a = new FVector3(1, 0, 0);
var b = new FVector3(0, 1, 0);
// Vector operations for spatial computations
Параметри завантаження та збереження
Кожен формат має спеціальні класи параметрів, які дозволяють керувати поведінкою імпорту та експорту:
| Формат | Параметри завантаження | Параметри збереження |
|---|---|---|
| OBJ | ObjLoadOptions | ObjSaveOptions |
| STL | StlLoadOptions | StlSaveOptions |
| glTF / GLB | GltfLoadOptions | GltfSaveOptions |
| FBX | FbxLoadOptions | FbxSaveOptions |
| 3MF | TmfLoadOptions | TmfSaveOptions |
Наприклад, щоб завантажити файл OBJ з інвертуванням координат та нормалізацією нормалей:
var opts = new ObjLoadOptions();
opts.FlipCoordinateSystem = true;
opts.NormalizeNormal = true;
scene.Open("model.obj", opts);
Підтримувані формати
У наступній таблиці підсумовано формати, які Aspose.3D FOSS для .NET може читати та записувати.
| Формат | Розширення | Імпорт | Експорт | Примітки |
|---|---|---|---|---|
| OBJ | .obj | Так | Так | З матеріалами MTL |
| STL | .stl | Так | Так | Бінарний + ASCII |
| glTF 2.0 | .gltf | Так | Так | формат JSON |
| GLB | .glb | Так | Так | Бінарний glTF |
| FBX | .fbx | Так | Так | Режими ASCII та бінарні |
| Collada | .dae | Так | Так | |
| 3MF | .3mf | Так | Так | формат 3D‑виробництва на основі ZIP |
Посібник з вибору формату
Вибір правильного формату залежить від вашого випадку використання:
- OBJ ідеальний, коли потрібна максимальна сумісність між 3D‑інструментами. Майже будь‑яка програма моделювання може читати та записувати OBJ. Він добре підходить для обміну сітковими даними, але передає лише базову інформацію про матеріали через супутні файли MTL.
- STL — формат вибору для робочих процесів 3D‑друку. Він зберігає необроблену трикутну геометрію без матеріалів та ієрархії сцени, що саме те, чого очікує програмне забезпечення слайсера.
- glTF — сучасний стандарт для веб‑ та реального‑часового 3D. Підтримує PBR‑матеріали, повні ієрархії сцени та розроблений для ефективної передачі. Використовуйте glTF при створенні веб‑оглядачів або при орієнтації на будь‑який конвеєр реального‑часового рендерингу.
- FBX глибоко інтегрований у робочі процеси розробки ігор та створення цифрового контенту. Підтримує багаті дані сцени, включаючи ієрархії та матеріали. Aspose.3D FOSS для .NET підтримує FBX імпорт та експорт в обох режимах: ASCII та бінарному.
- 3MF — сучасний формат 3D‑друку, який підтримує багаті метадані, матеріали та багатооб’єктові сцени в одному пакеті на базі ZIP.
Відомі обмеження
Scene.Render() є не підтримується у FOSS-версії. Виклик цього методу викине NotImplementedException. Бібліотека розроблена для файлової 3D обробки – завантаження, маніпулювання, трансформування та збереження моделей – а не для рендерингу в реальному часі на дисплей.
Відкритий код та ліцензування
Aspose.3D FOSS для .NET випущено під MIT License. Це означає, що ви вільні:
- Використовувати бібліотеку у комерційних та пропрієтарних застосунках.
- Модифікувати вихідний код відповідно до ваших потреб.
- Розповсюджувати бібліотеку як частину вашого власного програмного забезпечення.
Не передбачено роялті, обмежень використання та вимог щодо атрибуції, окрім того, що зазначено в ліцензії MIT.
Повний вихідний код розміщений на GitHub, і внески вітаються: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET
Системні вимоги
| Вимога | Деталі |
|---|---|
| .NET версія | 10.0 or later |
| Залежності | Немає (чистий C#) |
| Платформи | Будь-яка платформа, що запускає .NET |
| Менеджер пакетів | NuGet |
Початок роботи
Ось ресурси, які допоможуть вам розпочати роботу:
- Документація – всебічні посібники та огляди API доступні на Aspose.3D сайт документації.
- База знань – практичні статті-інструкції та поради з усунення проблем у Aspose.3D KB.
- Довідник API – докладна довідка по класах і методах за Aspose.3D довідник API.
- Вихідний код – переглядайте та робіть внесок на GitHub.
- NuGet – пакет опубліковано як
Aspose.3D.Converterна NuGet.
Типові випадки використання
Ось кілька практичних сценаріїв, у яких Aspose.3D FOSS для .NET добре підходить:
Конвеєри конвертації форматів
Багато команд отримують 3D‑активи в одному форматі, але потребують їх в іншому. Дизайнерська команда може працювати у FBX, тоді як веб‑команда потребує glTF. Бібліотека дозволяє створювати автоматизовані конвеєри конвертації:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;
// Convert all incoming FBX assets to GLB for the web team
var scene = new Scene();
scene.Open("asset.fbx");
scene.Save("asset.glb");
3D Model Inspection and Validation
Перед інтеграцією 3D‑активу у ваш застосунок, можливо, захочете перевірити його вміст — перевірка кількості вузлів, верифікація геометрії або підтвердження наявності очікуваних елементів:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
var scene = new Scene();
scene.Open("model.obj");
int nodeCount = scene.RootNode.ChildNodes.Count;
Console.WriteLine("Top-level nodes: " + nodeCount);
foreach (var child in scene.RootNode.ChildNodes)
{
if (child.Entity is Mesh mesh)
{
Console.WriteLine(child.Name + ": "
+ mesh.ControlPoints.Count + " vertices");
}
}
Збірка сцени
Ви можете завантажити кілька моделей і об’єднати їх в одну сцену:
using Aspose.ThreeD;
var scene = new Scene();
var part1 = new Scene();
part1.Open("chassis.obj");
var part2 = new Scene();
part2.Open("wheels.obj");
// Add nodes from each part into the combined scene
foreach (var child in part1.RootNode.ChildNodes)
{
scene.RootNode.ChildNodes.Add(child);
}
foreach (var child in part2.RootNode.ChildNodes)
{
scene.RootNode.ChildNodes.Add(child);
}
scene.Save("assembled.gltf");
Що далі
У майбутніх дописах ми розглянемо:
- Глибоке занурення у ключові можливості API графа сцени, матеріали та математичні утиліти.
- Практичний посібник з роботи з кожним підтримуваним 3D‑форматом — OBJ, STL, glTF, FBX та 3MF — включаючи параметри завантаження/збереження та шаблони пакетної конвертації.
Слідкуйте за оновленнями, і не соромтеся досліджувати бібліотеку та ділитися своїми відгуками на GitHub.