Ми раді оголосити про доступність Aspose.3D FOSS for .NET – безкоштовна, з відкритим вихідним кодом бібліотека для роботи з 3D форматами файлів у .NET застосунках. Створена як чисте рішення на C# без нативних залежностей, бібліотека орієнтована на .NET 10.0 і новіші, що робить її доступною для широкого спектру проєктів та середовищ.
У цьому дописі розглядаються можливості бібліотеки, як розпочати роботу та куди рухатися далі.
Що таке Aspose.3D FOSS for .NET?
Aspose.3D FOSS for .NET — легка бібліотека для обробки 3D файлів, опублікована під ліцензія MIT. Вона надає 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 --version 26.1.0
Ваше перше перетворення
Найпростіший випадок використання — завантаження 3D‑файлу в одному форматі та збереження його в іншому. Ось двохрядкове перетворення з OBJ у STL:
using Aspose.ThreeD;
var scene = new Scene();
scene.Open("cube.obj");
scene.Save("output.stl");
The Scene клас є центральною точкою входу. Викличте 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 for .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 for .NET supports FBX імпорт та експорт в обох режимах: ASCII та бінарному.
- 3MF є сучасним форматом 3D‑друку, який підтримує багаті метадані, матеріали та багатооб’єктові сцени в одному пакеті на основі ZIP.
Відомі обмеження
Scene.Render() є не підтримується у FOSS-версії. Виклик цього методу викличе a 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на 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.